diff --git a/javatools/src/main/java/org/xvm/api/InterpreterConnector.java b/javatools/src/main/java/org/xvm/api/InterpreterConnector.java
index f4cf687f69..04eed9ad06 100644
--- a/javatools/src/main/java/org/xvm/api/InterpreterConnector.java
+++ b/javatools/src/main/java/org/xvm/api/InterpreterConnector.java
@@ -95,7 +95,7 @@ public void invoke0(MethodStructure method, String... asArg) {
TypeConstant typeArg = method.getParam(0).getType();
assert typeStrings.isA(typeArg);
- ahArg = new ObjectHandle[]{xString.makeArrayHandle(asArg)};
+ ahArg = new ObjectHandle[]{xString.makeArrayHandle(m_containerMain, asArg)};
}
break;
@@ -103,7 +103,7 @@ public void invoke0(MethodStructure method, String... asArg) {
TypeConstant typeArg = method.getParam(0).getType();
assert typeStrings.isA(typeArg);
// the method requires an array that we can supply
- ahArg = new ObjectHandle[]{xString.makeArrayHandle(asArg)};
+ ahArg = new ObjectHandle[]{xString.makeArrayHandle(m_containerMain, asArg)};
break;
}
}
diff --git a/javatools/src/main/java/org/xvm/asm/OpVar.java b/javatools/src/main/java/org/xvm/asm/OpVar.java
index dd369a81a7..022a258131 100644
--- a/javatools/src/main/java/org/xvm/asm/OpVar.java
+++ b/javatools/src/main/java/org/xvm/asm/OpVar.java
@@ -147,7 +147,8 @@ protected TypeComposition getArrayClass(Frame frame, TypeConstant typeList) {
if (clzArray == null || !typeList.equals(typePrev)) {
TypeConstant typeEl = typeList.resolveGenericType("Element");
- clzArray = xArray.INSTANCE.ensureParameterizedClass(context.f_container, typeEl);
+ clzArray = context.f_container.nativeTemplate(xArray.class).
+ ensureParameterizedClass(context.f_container, typeEl);
context.setOpInfo(this, Category.Composition, clzArray);
context.setOpInfo(this, Category.Type, typeList);
diff --git a/javatools/src/main/java/org/xvm/asm/constants/TypeConstant.java b/javatools/src/main/java/org/xvm/asm/constants/TypeConstant.java
index 803fb06eb2..373d06af85 100644
--- a/javatools/src/main/java/org/xvm/asm/constants/TypeConstant.java
+++ b/javatools/src/main/java/org/xvm/asm/constants/TypeConstant.java
@@ -7812,7 +7812,7 @@ public TypeHandle ensureTypeHandle(Container container) {
}
// don't cache a "foreign" handle
- return xRTType.makeForeignHandle(this);
+ return xRTType.makeForeignHandle(container, this);
}
/**
diff --git a/javatools/src/main/java/org/xvm/asm/op/Assert.java b/javatools/src/main/java/org/xvm/asm/op/Assert.java
index 5207c65389..cad34ddb69 100644
--- a/javatools/src/main/java/org/xvm/asm/op/Assert.java
+++ b/javatools/src/main/java/org/xvm/asm/op/Assert.java
@@ -126,7 +126,7 @@ protected int complete(Frame frame, int iPC, String sMsg) {
ClassConstant constClz = (ClassConstant) idConstruct.getNamespace();
ClassTemplate template = frame.ensureTemplate(constClz);
ClassComposition clzTarget = template.getCanonicalClass(frame.f_context.f_container);
- StringHandle hMsg = xString.makeHandle(sMsg);
+ StringHandle hMsg = xString.makeHandle(frame, sMsg);
ObjectHandle[] ahArg = new ObjectHandle[construct.getMaxVars()];
ahArg[0] = hMsg;
diff --git a/javatools/src/main/java/org/xvm/asm/op/MoveRef.java b/javatools/src/main/java/org/xvm/asm/op/MoveRef.java
index 61ed0d552e..dc55ffec3a 100644
--- a/javatools/src/main/java/org/xvm/asm/op/MoveRef.java
+++ b/javatools/src/main/java/org/xvm/asm/op/MoveRef.java
@@ -18,6 +18,7 @@
import org.xvm.javajit.registers.Ref;
+import org.xvm.runtime.Container;
import org.xvm.runtime.Frame;
import org.xvm.runtime.ObjectHandle;
import org.xvm.runtime.TypeComposition;
@@ -71,8 +72,9 @@ public int process(Frame frame, int iPC) {
typeReg = infoSrc.getType();
}
} else {
- TypeComposition clzRef = xRef.INSTANCE.ensureParameterizedClass(
- frame.f_context.f_container, infoSrc.getType());
+ Container container = frame.container();
+ TypeComposition clzRef = container.nativeTemplate(xRef.class).
+ ensureParameterizedClass(container, infoSrc.getType());
hRef = new RefHandle(clzRef, frame, m_nFromValue);
typeReg = hRef.getType();
}
diff --git a/javatools/src/main/java/org/xvm/asm/op/MoveVar.java b/javatools/src/main/java/org/xvm/asm/op/MoveVar.java
index 01d1e20981..75d59cb91d 100644
--- a/javatools/src/main/java/org/xvm/asm/op/MoveVar.java
+++ b/javatools/src/main/java/org/xvm/asm/op/MoveVar.java
@@ -18,6 +18,7 @@
import org.xvm.javajit.registers.Ref;
+import org.xvm.runtime.Container;
import org.xvm.runtime.Frame;
import org.xvm.runtime.ObjectHandle;
import org.xvm.runtime.ObjectHandle.ExceptionHandle;
@@ -103,8 +104,9 @@ protected int complete(Frame frame, ObjectHandle hReferent) {
? frame.poolContext().typeObject()
: frame.getVarInfo(nFrom).getType();
}
- TypeComposition clzRef = xVar.INSTANCE.
- ensureParameterizedClass(frame.f_context.f_container, typeReferent);
+ Container container = frame.container();
+ TypeComposition clzRef = container.nativeTemplate(xVar.class).
+ ensureParameterizedClass(container, typeReferent);
hRef = new RefHandle(clzRef, frame, nFrom);
if (fNextReg) {
frame.introduceResolvedVar(nTo, hRef.getType());
diff --git a/javatools/src/main/java/org/xvm/asm/op/Var_M.java b/javatools/src/main/java/org/xvm/asm/op/Var_M.java
index acbbbe867d..bfb2640574 100644
--- a/javatools/src/main/java/org/xvm/asm/op/Var_M.java
+++ b/javatools/src/main/java/org/xvm/asm/op/Var_M.java
@@ -108,8 +108,9 @@ public int process(Frame frame, int iPC) {
frame.introduceResolvedVar(m_nVar, typeMap, null, Frame.VAR_STANDARD, null);
- return xListMap.INSTANCE.constructMap(frame, typeMap, ahKey, ahValue,
- anyDeferred(ahKey), anyDeferred(ahValue), m_nVar);
+ return frame.nativeTemplate(xListMap.class).
+ constructMap(frame, typeMap, ahKey, ahValue,
+ anyDeferred(ahKey), anyDeferred(ahValue), m_nVar);
} catch (ExceptionHandle.WrapperException e) {
return frame.raiseException(e);
}
diff --git a/javatools/src/main/java/org/xvm/asm/op/Var_MN.java b/javatools/src/main/java/org/xvm/asm/op/Var_MN.java
index b60ad53367..9722db862b 100644
--- a/javatools/src/main/java/org/xvm/asm/op/Var_MN.java
+++ b/javatools/src/main/java/org/xvm/asm/op/Var_MN.java
@@ -117,8 +117,9 @@ public int process(Frame frame, int iPC) {
frame.introduceResolvedVar(m_nVar, typeMap,
frame.getString(m_nNameId), Frame.VAR_STANDARD, null);
- return xListMap.INSTANCE.constructMap(frame, typeMap, ahKey, ahValue,
- anyDeferred(ahKey), anyDeferred(ahValue), m_nVar);
+ return frame.nativeTemplate(xListMap.class).
+ constructMap(frame, typeMap, ahKey, ahValue,
+ anyDeferred(ahKey), anyDeferred(ahValue), m_nVar);
} catch (ExceptionHandle.WrapperException e) {
return frame.raiseException(e);
}
diff --git a/javatools/src/main/java/org/xvm/runtime/ClassComposition.java b/javatools/src/main/java/org/xvm/runtime/ClassComposition.java
index 6026f3ecc7..4b4d88b7be 100644
--- a/javatools/src/main/java/org/xvm/runtime/ClassComposition.java
+++ b/javatools/src/main/java/org/xvm/runtime/ClassComposition.java
@@ -429,7 +429,7 @@ public StringHandle[] getFieldNameArray() {
FieldInfo field = entry.getValue();
if (!(enid instanceof NestedIdentity) && field.isRegular()) {
- ashNames[i++] = xString.makeHandle(field.getName());
+ ashNames[i++] = xString.makeHandle(f_container, field.getName());
}
}
assert i == m_cRegularFields;
diff --git a/javatools/src/main/java/org/xvm/runtime/ClassTemplate.java b/javatools/src/main/java/org/xvm/runtime/ClassTemplate.java
index 650582016e..2db8c1c139 100644
--- a/javatools/src/main/java/org/xvm/runtime/ClassTemplate.java
+++ b/javatools/src/main/java/org/xvm/runtime/ClassTemplate.java
@@ -127,9 +127,51 @@ public void registerNativeTemplates() {
* @param template the new template
*/
protected void registerNativeTemplate(ClassTemplate template) {
+ registerAuxiliaryTemplate(template);
+
+ // this template implements a composite type declared by "this" one, so it has no name of
+ // its own to be found under; publish it into the container's native template table
+ nativeTemplates().register(template);
+ }
+
+ /**
+ * Register a native template that serves an additional structure using a template class that
+ * is already spoken for. Unlike {@link #registerNativeTemplate}, this does not make the
+ * template its class's native instance - {@link NativeTemplates#get} must keep answering with
+ * the template registered for the class's own structure.
+ *
+ * @param template the new template
+ */
+ protected void registerAuxiliaryTemplate(ClassTemplate template) {
((NativeContainer) f_container).registerNativeTemplate(template.getCanonicalType(), template);
}
+ /**
+ * Obtain this template's container's table of native templates - for registering a template,
+ * or anything else that works on the table itself. To just look one up, prefer the shorthand
+ * {@link Container#nativeTemplate} on {@link #f_container}.
+ *
+ * @return this template's container's table of native templates
+ */
+ protected NativeTemplates nativeTemplates() {
+ return f_container.nativeTemplates();
+ }
+
+ /**
+ * Note: the class has to be named explicitly, because it is the class that declares the
+ * calling method that matters, not this template's own class. A template that inherits such a
+ * method - {@code xVar} extends {@code xRef} - is the native instance of its own class while
+ * still not being the one the inherited method is asking about.
+ *
+ * @param clzTemplate the native template class being asked about
+ *
+ * @return true iff this is the container's native template for the specified class, rather
+ * than one of the per-structure templates that the same class also backs
+ */
+ protected boolean isNativeInstance(Class extends ClassTemplate> clzTemplate) {
+ return this == f_container.nativeTemplate(clzTemplate);
+ }
+
/**
* Initialize native properties, methods and functions.
*/
@@ -180,7 +222,7 @@ public ClassTemplate getSuper() {
if ("Object".equals(f_sName)) {
return null;
}
- templateSuper = m_templateSuper = xObject.INSTANCE;
+ templateSuper = m_templateSuper = f_container.nativeTemplate(xObject.class);
} else {
templateSuper = m_templateSuper =
f_container.getTemplate(f_structSuper.getIdentityConstant());
@@ -1970,7 +2012,7 @@ public int overflow(Frame frame) {
* @return one of the {@link Op#R_NEXT}, {@link Op#R_CALL} or {@link Op#R_EXCEPTION} values
*/
protected int buildStringValue(Frame frame, ObjectHandle hTarget, int iReturn) {
- return frame.assignValue(iReturn, xString.makeHandle(hTarget.toString()));
+ return frame.assignValue(iReturn, xString.makeHandle(frame, hTarget.toString()));
}
@@ -2427,7 +2469,7 @@ private void prepareFinalizer(Frame frame, MethodStructure ctor, ObjectHandle[]
if (hfn == null) {
// in case super constructors have their own finalizers, we need a non-null anchor
// that may be replaced by Frame.chainFinalizers()
- hfn = FullyBoundHandle.NO_OP;
+ hfn = FullyBoundHandle.ensureNoOp(frame.container());
}
frame.m_hfnFinally = hfn;
diff --git a/javatools/src/main/java/org/xvm/runtime/Container.java b/javatools/src/main/java/org/xvm/runtime/Container.java
index 0ff905d34b..0e6101d0fd 100644
--- a/javatools/src/main/java/org/xvm/runtime/Container.java
+++ b/javatools/src/main/java/org/xvm/runtime/Container.java
@@ -99,10 +99,12 @@ public ServiceContext ensureServiceContext() {
ServiceContext ctx = m_contextMain;
if (ctx == null) {
try (var ignore = ConstantPool.withPool(getConstantPool())) {
+ xService templateService = nativeTemplate(xService.class);
+
m_contextMain = ctx = createServiceContext(getModule().getName());
- xService.INSTANCE.createServiceHandle(ctx,
- xService.INSTANCE.getCanonicalClass(),
- xService.INSTANCE.getCanonicalType());
+ templateService.createServiceHandle(ctx,
+ templateService.getCanonicalClass(),
+ templateService.getCanonicalType());
}
}
return ctx;
@@ -399,6 +401,32 @@ public Container getOriginContainer(SingletonConstant constSingle) {
: this;
}
+ /**
+ * Obtain this container's table of native templates.
+ *
+ *
One of three ways in. This one is the table itself, for bulk work - registering a
+ * template, or anything else that is not a single lookup. To look one template up, use
+ * {@link #nativeTemplate}. To get the table from something that is not a container -
+ * a frame, a template, a composition - use {@link NativeTemplates#of}.
+ *
+ * @return this container's table of native templates
+ */
+ public NativeTemplates nativeTemplates() {
+ return getNativeContainer().f_templates;
+ }
+
+ /**
+ * Look one native template up - the shorthand for the common case, over
+ * {@link #nativeTemplates()}.
+ *
+ * @param clzTemplate the native template class
+ *
+ * @return this container's native template of that class
+ */
+ public T nativeTemplate(Class clzTemplate) {
+ return nativeTemplates().get(clzTemplate);
+ }
+
/**
* @return a ClassTemplate for a type associated with the specified name (core classes only)
*/
diff --git a/javatools/src/main/java/org/xvm/runtime/Frame.java b/javatools/src/main/java/org/xvm/runtime/Frame.java
index 6ee6a8d119..0ed0209f26 100644
--- a/javatools/src/main/java/org/xvm/runtime/Frame.java
+++ b/javatools/src/main/java/org/xvm/runtime/Frame.java
@@ -236,7 +236,7 @@ public Frame createNativeFrame(Op[] aop, ObjectHandle[] ahVar, int iReturn, int[
* @return a new frame
*/
public Frame createWaitFrame(CompletableFuture cfResult, int iReturn) {
- return createWaitFrame(xFuture.makeHandle(cfResult), iReturn);
+ return createWaitFrame(xFuture.makeHandle(container(), cfResult), iReturn);
}
/**
@@ -280,7 +280,7 @@ public Frame createWaitFrame(CompletableFuture cfResult, int[] a
CompletableFuture cfReturn =
cfResult.thenApply(ahResult -> ahResult[iResult]);
- ahFuture[i] = xFuture.makeHandle(cfReturn);
+ ahFuture[i] = xFuture.makeHandle(container(), cfReturn);
frameNext.f_aInfo[i] = new VarInfo(xFuture.TYPE, VAR_DYNAMIC_REF);
}
@@ -1047,7 +1047,7 @@ public int assignFutureResult(int iReturn, CompletableFuture cfRes
}
if (isFuture(iReturn)) {
- return assignValue(iReturn, xFuture.makeHandle(cfResult));
+ return assignValue(iReturn, xFuture.makeHandle(container(), cfResult));
}
// the wait frame will deal with exceptions
@@ -1331,6 +1331,25 @@ public ConstantPool poolContext() {
return f_context.f_pool;
}
+ /**
+ * @return the container that owns the service this frame is running on
+ */
+ public Container container() {
+ return f_context.f_container;
+ }
+
+ /**
+ * Look one native template up - the shorthand for the common case, over
+ * {@code container().nativeTemplates()}.
+ *
+ * @param clzTemplate the native template class
+ *
+ * @return this frame's container's native template of that class
+ */
+ public T nativeTemplate(Class clzTemplate) {
+ return container().nativeTemplate(clzTemplate);
+ }
+
/**
* @return an ObjectHandle for the constant (could be a DeferredCallHandle)
*/
diff --git a/javatools/src/main/java/org/xvm/runtime/MainContainer.java b/javatools/src/main/java/org/xvm/runtime/MainContainer.java
index 5126787a9b..584bb1c367 100644
--- a/javatools/src/main/java/org/xvm/runtime/MainContainer.java
+++ b/javatools/src/main/java/org/xvm/runtime/MainContainer.java
@@ -62,12 +62,12 @@ public ObjectHandle getInjectable(Frame frame, String sName, TypeConstant type,
if (!listValue.isEmpty()) {
if (typeRequired.equals(typeString)) {
// require String, return the last element
- return xString.makeHandle(listValue.getLast());
+ return xString.makeHandle(frame, listValue.getLast());
}
if (typeRequired.equals(typeStrings)) {
// require String[], return the whole List as an array
String[] asValue = listValue.toArray(String[]::new);
- return xString.makeArrayHandle(asValue);
+ return xString.makeArrayHandle(frame.container(), asValue);
}
if (typeRequired.isEnum()) {
TypeComposition clz = typeRequired.ensureClass(frame);
@@ -108,7 +108,7 @@ private ObjectHandle toDestringable(Frame frame, TypeConstant type, String sValu
TypeComposition clz = type.ensureClass(frame);
ClassTemplate template = clz.getTemplate();
MethodStructure ctor = template.getStructure().findMethod("construct", 1, pool.typeString());
- ObjectHandle[] ahArgs = new ObjectHandle[]{xString.makeHandle(sValue)};
+ ObjectHandle[] ahArgs = new ObjectHandle[]{xString.makeHandle(frame, sValue)};
int iResult = template.construct(frame, ctor, clz, null, ahArgs, Op.A_STACK);
return frame.popResult(iResult);
}
@@ -203,7 +203,7 @@ public void invoke0(String sMethodName, ObjectHandle... ahArg) {
CallChain chain = clzModule.getMethodCallChain(sigMethod);
boolean fReturn = sigMethod.getReturnCount() > 0;
- FunctionHandle hInstantiateModuleAndRun = new NativeFunctionHandle((frame, ah, iRet) -> {
+ FunctionHandle hInstantiateModuleAndRun = new NativeFunctionHandle(this, (frame, ah, iRet) -> {
SingletonConstant idModule = frame.poolContext().ensureSingletonConstConstant(f_idModule);
ObjectHandle hModule = frame.getConstHandle(idModule);
int iReturn = fReturn ? Op.A_STACK : Op.A_IGNORE;
diff --git a/javatools/src/main/java/org/xvm/runtime/NativeContainer.java b/javatools/src/main/java/org/xvm/runtime/NativeContainer.java
index 0a1d09f09c..355f5d686e 100644
--- a/javatools/src/main/java/org/xvm/runtime/NativeContainer.java
+++ b/javatools/src/main/java/org/xvm/runtime/NativeContainer.java
@@ -167,8 +167,8 @@ private ConstantPool loadNativeTemplates() {
scanNativeDirectory(dirTemplates, "", mapTemplateClasses);
}
- // we need a number of INSTANCE static variables to be set up right away
- // (they are used by the ClassTemplate constructor)
+ // these have to be registered before anything else: the templates constructed below look
+ // them up through the container's native template table while they are being built
storeNativeTemplate(new xObject (this, getClassStructure("Object"), true));
storeNativeTemplate(new xEnum (this, getClassStructure("Enum"), true));
storeNativeTemplate(new xConst (this, getClassStructure("Const"), true));
@@ -202,8 +202,8 @@ private ConstantPool loadNativeTemplates() {
}
// add run-time templates
- f_mapTemplatesByType.put(pool.typeFunction(), xRTFunction.INSTANCE);
- f_mapTemplatesByType.put(pool.typeType() , xRTType.INSTANCE);
+ f_mapTemplatesByType.put(pool.typeFunction(), f_templates.get(xRTFunction.class));
+ f_mapTemplatesByType.put(pool.typeType() , f_templates.get(xRTType.class));
// clone the map since the loop below can add to it
Set setTemplates = new HashSet<>(f_mapTemplatesByType.values());
@@ -301,24 +301,24 @@ private void storeNativeTemplate(ClassTemplate template) {
private void initResources(ConstantPool pool) {
// +++ temporal.LocalClock
- xLocalClock templateClock = xLocalClock.INSTANCE;
+ xLocalClock templateClock = f_templates.get(xLocalClock.class);
TypeConstant typeClock = templateClock.getCanonicalType();
addResourceSupplier(new InjectionKey("clock" , typeClock), templateClock::ensureDefaultClock);
addResourceSupplier(new InjectionKey("localClock", typeClock), templateClock::ensureLocalClock);
addResourceSupplier(new InjectionKey("utcClock" , typeClock), templateClock::ensureUTCClock);
// +++ temporal.NanosTimer
- xNanosTimer templateTimer = xNanosTimer.INSTANCE;
+ xNanosTimer templateTimer = f_templates.get(xNanosTimer.class);
TypeConstant typeTimer = templateTimer.getCanonicalType();
addResourceSupplier(new InjectionKey("timer", typeTimer), templateTimer::ensureTimer);
// +++ io.Console
- xTerminalConsole templateConsole = xTerminalConsole.INSTANCE;
+ xTerminalConsole templateConsole = f_templates.get(xTerminalConsole.class);
TypeConstant typeConsole = templateConsole.getCanonicalType();
addResourceSupplier(new InjectionKey("console", typeConsole), templateConsole::ensureConsole);
// +++ numbers.Random
- xRTRandom templateRandom = xRTRandom.INSTANCE;
+ xRTRandom templateRandom = f_templates.get(xRTRandom.class);
TypeConstant typeRandom = templateRandom.getCanonicalType();
addResourceSupplier(new InjectionKey("rnd" , typeRandom), templateRandom::ensureDefaultRandom);
addResourceSupplier(new InjectionKey("random", typeRandom), templateRandom::ensureDefaultRandom);
@@ -333,55 +333,55 @@ private void initResources(ConstantPool pool) {
addResourceSupplier(new InjectionKey("tmpDir" , typeDirectory), this::ensureTmpDir);
// +++ net:Network
- xRTNetwork templateNetwork = xRTNetwork.INSTANCE;
+ xRTNetwork templateNetwork = f_templates.get(xRTNetwork.class);
TypeConstant typeNetwork = templateNetwork.getCanonicalType();
addResourceSupplier(new InjectionKey("network" , typeNetwork), this::ensureInsecureNetwork);
addResourceSupplier(new InjectionKey("insecureNetwork", typeNetwork), this::ensureInsecureNetwork);
addResourceSupplier(new InjectionKey("secureNetwork" , typeNetwork), this::ensureSecureNetwork);
// +++ crypto:KeyStore
- xRTKeyStore templateKeyStore = xRTKeyStore.INSTANCE;
+ xRTKeyStore templateKeyStore = f_templates.get(xRTKeyStore.class);
TypeConstant typeKeyStore = templateKeyStore.getCanonicalType();
addResourceSupplier(new InjectionKey("keystore", typeKeyStore), templateKeyStore::ensureKeyStore);
// +++ crypto:CertificateManager
- xRTCertificateManager templateCertManager = xRTCertificateManager.INSTANCE;
+ xRTCertificateManager templateCertManager = f_templates.get(xRTCertificateManager.class);
TypeConstant typeCertManager = templateCertManager.getCanonicalType();
addResourceSupplier(new InjectionKey("manager", typeCertManager), templateCertManager::ensureManager);
// +++ crypto:Algorithms
- xRTAlgorithms templateAlgorithms = xRTAlgorithms.INSTANCE;
+ xRTAlgorithms templateAlgorithms = f_templates.get(xRTAlgorithms.class);
TypeConstant typeAlgorithms = pool.ensureTerminalTypeConstant(
pool.ensureClassConstant(pool.ensureModuleConstant("crypto.xtclang.org"), "Algorithms"));
addResourceSupplier(new InjectionKey("algorithms", typeAlgorithms), templateAlgorithms::ensureAlgorithms);
// +++ web:Client.Connector
- xRTConnector templateConnector = xRTConnector.INSTANCE;
+ xRTConnector templateConnector = f_templates.get(xRTConnector.class);
TypeConstant typeConnector = templateConnector.getCanonicalType();
addResourceSupplier(new InjectionKey("connector", typeConnector), templateConnector::ensureConnector);
// +++ web:WebServer
- xRTServer templateServer = xRTServer.INSTANCE;
+ xRTServer templateServer = f_templates.get(xRTServer.class);
TypeConstant typeServer = templateServer.getCanonicalType();
addResourceSupplier(new InjectionKey("server", typeServer), templateServer::ensureServer);
// +++ mgmt.Linker
- xContainerLinker templateLinker = xContainerLinker.INSTANCE;
+ xContainerLinker templateLinker = f_templates.get(xContainerLinker.class);
TypeConstant typeLinker = templateLinker.getCanonicalType();
addResourceSupplier(new InjectionKey("linker", typeLinker), templateLinker::ensureLinker);
// +++ mgmt.ModuleRepository
- xCoreRepository templateRepo = xCoreRepository.INSTANCE;
+ xCoreRepository templateRepo = f_templates.get(xCoreRepository.class);
TypeConstant typeRepo = templateRepo.getCanonicalType();
addResourceSupplier(new InjectionKey("repository", typeRepo), templateRepo::ensureModuleRepository);
// +++ lang.src.Compiler
- xRTCompiler templateCompiler = xRTCompiler.INSTANCE;
+ xRTCompiler templateCompiler = f_templates.get(xRTCompiler.class);
TypeConstant typeCompiler = templateCompiler.getCanonicalType();
addResourceSupplier(new InjectionKey("compiler", typeCompiler), templateCompiler::ensureCompiler);
// +++ reflect.Injector
- xInjector templateInjector = xInjector.INSTANCE;
+ xInjector templateInjector = f_templates.get(xInjector.class);
TypeConstant typeInjector = templateInjector.getCanonicalType();
addResourceSupplier(new InjectionKey("injector", typeInjector), templateInjector::ensureInjector);
@@ -390,7 +390,7 @@ private void initResources(ConstantPool pool) {
addResourceSupplier(new InjectionKey("properties", typeProps), this::ensureProperties);
// +++ collections.HashCollector
- xBasicHashCollector templateHashCollector = xBasicHashCollector.INSTANCE;
+ xBasicHashCollector templateHashCollector = f_templates.get(xBasicHashCollector.class);
TypeConstant typeHashCollector = templateHashCollector.getCanonicalType();
addResourceSupplier(new InjectionKey("hash", typeHashCollector), templateHashCollector::ensureCollector);
}
@@ -522,8 +522,8 @@ private ObjectHandle ensureProperties(Frame frame, ObjectHandle hOpts) {
if (sKey.startsWith("xvm.")) {
String sVal = System.getProperty(sKey);
if (sVal != null) {
- listKeys.add(xString.makeHandle(sKey.substring(4)));
- listVals.add(xString.makeHandle(sVal));
+ listKeys.add(xString.makeHandle(frame, sKey.substring(4)));
+ listVals.add(xString.makeHandle(frame, sVal));
}
}
}
@@ -884,6 +884,11 @@ public String toString() {
private ObjectHandle m_hSecureNetwork;
private ObjectHandle m_hInsecureNetwork;
+ /**
+ * This container's native template table; see {@link NativeTemplates}.
+ */
+ final NativeTemplates f_templates = new NativeTemplates(this);
+
private final ModuleRepository f_repository;
private ModuleStructure m_moduleSystem;
private ModuleStructure m_moduleTurtle;
diff --git a/javatools/src/main/java/org/xvm/runtime/NativeTemplates.java b/javatools/src/main/java/org/xvm/runtime/NativeTemplates.java
new file mode 100644
index 0000000000..a02eccaf45
--- /dev/null
+++ b/javatools/src/main/java/org/xvm/runtime/NativeTemplates.java
@@ -0,0 +1,198 @@
+package org.xvm.runtime;
+
+
+import java.util.List;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import static java.util.Objects.requireNonNull;
+
+import org.xvm.runtime.template.Proxy;
+
+
+/**
+ * The container-owned lookup table for native templates.
+ *
+ *
Native templates are built per container - {@link NativeContainer} constructs a complete set
+ * for every instance, and a single JVM can build several. Every template therefore carries an
+ * owner ({@link ClassTemplate#f_container}), and a lookup has to answer with the template that
+ * belongs to the container doing the asking.
+ *
+ *
This class is the one place that answers that question. It replaces the {@code INSTANCE}
+ * static that each native template used to publish from its own constructor: a process-global
+ * mutable field, written by a {@code this}-escape, which the last container to be constructed
+ * silently took over from every container built before it.
+ *
+ *
How a template is found
+ *
+ *
Most native templates are addressable by name in the container's own registry, and the name
+ * is derived from the template class - {@code org.xvm.runtime.template.numbers.xFloat64} is the
+ * template for {@code numbers.Float64}. Those are resolved lazily, on first use, through
+ * {@link Container#getTemplate(String, Class)}; nothing is published while a template is still
+ * being constructed.
+ *
+ *
A minority of templates have no name of their own, because they implement a composite type
+ * declared by some other template - the bit/byte/nibble arrays, the array delegates and the array
+ * views, and {@code Identity}. Those are handed to {@link #register} by the template that declares
+ * them, from {@link ClassTemplate#registerNativeTemplates()}, which runs after construction has
+ * finished.
+ *
+ *
{@link Proxy} has neither a name nor a declaring template: it borrows {@code Object}'s
+ * structure and exists only to back proxied service handles. It is created on demand, once per
+ * container.
+ */
+public final class NativeTemplates {
+ /**
+ * The owning container. Always a {@link NativeContainer}; nested containers share their
+ * native container's templates, exactly as {@link Container#getTemplate(String)} does.
+ */
+ private final Container f_container;
+
+ /**
+ * The resolved templates, keyed by template class.
+ */
+ private final ConcurrentMap, ClassTemplate> f_mapByClass = new ConcurrentHashMap<>();
+
+ /**
+ * The package prefix shared by every native template class.
+ */
+ private static final String TEMPLATE_PACKAGE = "org.xvm.runtime.template.";
+
+ NativeTemplates(Container container) {
+ f_container = requireNonNull(container, "container");
+ }
+
+
+ // ----- resolving the table -------------------------------------------------------------------
+
+ // The adapter: whatever owner-bearing thing is in hand, this is its table. Its job is
+ // normalising the four inputs - in particular ClassTemplate and TypeComposition, which have no
+ // lookup method of their own and are not meant to grow one.
+ //
+ // The other two ways in are Container.nativeTemplates(), the table itself for bulk work, and
+ // Container.nativeTemplate(clz) / Frame.nativeTemplate(clz), the shorthand for a single lookup.
+ // Three layers, not three spellings of one thing; none of them is redundant.
+
+ /**
+ * @return the native template table for the specified container
+ */
+ public static NativeTemplates of(Container container) {
+ return requireNonNull(container, "container").nativeTemplates();
+ }
+
+ /**
+ * @return the native template table for the container the specified frame runs in
+ */
+ public static NativeTemplates of(Frame frame) {
+ return of(requireNonNull(frame, "frame").container());
+ }
+
+ /**
+ * @return the native template table for the specified template's container
+ */
+ public static NativeTemplates of(ClassTemplate template) {
+ return of(requireNonNull(template, "template").f_container);
+ }
+
+ /**
+ * @return the native template table for the container the specified composition belongs to
+ */
+ public static NativeTemplates of(TypeComposition composition) {
+ return of(requireNonNull(composition, "composition").getContainer());
+ }
+
+
+ // ----- looking a template up -----------------------------------------------------------------
+
+ /**
+ * Obtain this container's native template of the specified class.
+ *
+ *
This is the container-scoped replacement for the old {@code Xxx.INSTANCE} static: the
+ * answer is always owned by this table's container, never by whichever container happened to
+ * be constructed most recently.
+ *
+ * @param clzTemplate the native template class
+ *
+ * @return the template of that class belonging to this container
+ */
+ /**
+ * The component names of the templates this container has actually resolved, in order.
+ *
+ *
This is the reason the table exists rather than 139 static fields: what a container has
+ * pulled in is now a question with one place to ask it. Footprinting a long-lived host - which
+ * templates a session actually touched, and how that grows - was not expressible when the answer
+ * was spread across a static per template class.
+ *
+ * @return the resolved template names, sorted; never null
+ */
+ public List resolvedNames() {
+ // Named from the template's own structure, not derived from its Java class: the table also
+ // holds templates whose class name maps to no component (Proxy, Identity), and an
+ // instrumentation view must not throw on the very entries it exists to report.
+ return f_mapByClass.values().stream()
+ .map(template -> template.getStructure().getIdentityConstant().getPathString())
+ .sorted()
+ .toList();
+ }
+
+ public T get(Class clzTemplate) {
+ ClassTemplate template = f_mapByClass.get(requireNonNull(clzTemplate, "clzTemplate"));
+ if (template == null) {
+ // Resolve outside of the map's update path: a lookup can recurse during bootstrap, and
+ // computeIfAbsent() forbids recursive updates to the same map.
+ template = clzTemplate == Proxy.class
+ ? new Proxy(f_container)
+ : f_container.getTemplate(componentNameOf(clzTemplate), clzTemplate);
+
+ ClassTemplate templateExisting = f_mapByClass.putIfAbsent(clzTemplate, template);
+ if (templateExisting != null) {
+ template = templateExisting;
+ }
+ }
+ return clzTemplate.cast(template);
+ }
+
+ /**
+ * Add a template that cannot be found by name because it implements a composite type declared
+ * by another template.
+ *
+ *
Called from {@link ClassTemplate#registerNativeTemplates()}, after the template has been
+ * fully constructed - the map write is what publishes it.
+ *
+ *
The last registration for a class wins, which is what the {@code INSTANCE} assignment in
+ * the constructor did. It matters: {@code xRTDelegate} registers a nibble delegate twice, and
+ * the second one is the template the runtime used to hand out.
+ *
+ * @param template the fully constructed template to publish
+ */
+ void register(ClassTemplate template) {
+ f_mapByClass.put(requireNonNull(template, "template").getClass(), template);
+ }
+
+
+ // ----- helpers -------------------------------------------------------------------------------
+
+ /**
+ * Derive the component name a native template is registered under from its class name, using
+ * the same rule {@link NativeContainer} uses when it scans for template classes:
+ * {@code org.xvm.runtime.template.numbers.xFloat64} backs {@code numbers.Float64}.
+ *
+ * @param clzTemplate the native template class
+ *
+ * @return the component name
+ */
+ static String componentNameOf(Class extends ClassTemplate> clzTemplate) {
+ String sClass = clzTemplate.getName();
+
+ assert sClass.startsWith(TEMPLATE_PACKAGE) : sClass + " is not a native template";
+
+ String sPath = sClass.substring(TEMPLATE_PACKAGE.length());
+ int ofDot = sPath.lastIndexOf('.');
+ String sSimple = sPath.substring(ofDot + 1);
+
+ assert sSimple.charAt(0) == 'x' : sClass + " has no derivable component name";
+
+ return sPath.substring(0, ofDot + 1) + sSimple.substring(1);
+ }
+}
diff --git a/javatools/src/main/java/org/xvm/runtime/ObjectHandle.java b/javatools/src/main/java/org/xvm/runtime/ObjectHandle.java
index f1b88858a6..dc04240c1a 100644
--- a/javatools/src/main/java/org/xvm/runtime/ObjectHandle.java
+++ b/javatools/src/main/java/org/xvm/runtime/ObjectHandle.java
@@ -731,7 +731,8 @@ public boolean equals(Object obj) {
@Override
public String toString() {
- return super.toString() + (m_clazz.getTemplate() == xChar.INSTANCE
+ return super.toString()
+ + (m_clazz.getTemplate() == NativeTemplates.of(m_clazz).get(xChar.class)
? Handy.quotedChar((char) m_lValue)
: String.valueOf(m_lValue));
}
diff --git a/javatools/src/main/java/org/xvm/runtime/ProxyComposition.java b/javatools/src/main/java/org/xvm/runtime/ProxyComposition.java
index b90360b4a8..52b2adaeaf 100644
--- a/javatools/src/main/java/org/xvm/runtime/ProxyComposition.java
+++ b/javatools/src/main/java/org/xvm/runtime/ProxyComposition.java
@@ -20,7 +20,8 @@ public class ProxyComposition
public ProxyComposition(TypeComposition clzOrigin, TypeConstant typeProxy) {
super(clzOrigin);
- f_typeProxy = typeProxy;
+ f_typeProxy = typeProxy;
+ f_templateProxy = NativeTemplates.of(clzOrigin.getContainer()).get(Proxy.class);
}
/**
@@ -32,12 +33,12 @@ public TypeComposition getOrigin() {
@Override
public OpSupport getSupport() {
- return Proxy.INSTANCE;
+ return getTemplate();
}
@Override
public ClassTemplate getTemplate() {
- return Proxy.INSTANCE;
+ return f_templateProxy;
}
@Override
@@ -117,4 +118,10 @@ public String toString() {
* The revealed (proxying) type.
*/
private final TypeConstant f_typeProxy;
+
+ /**
+ * The Proxy template of the container this composition belongs to; resolved once, since
+ * getSupport()/getTemplate() sit on the op-dispatch path.
+ */
+ private final ClassTemplate f_templateProxy;
}
diff --git a/javatools/src/main/java/org/xvm/runtime/ServiceContext.java b/javatools/src/main/java/org/xvm/runtime/ServiceContext.java
index 91b88d5c09..f4a71fab02 100644
--- a/javatools/src/main/java/org/xvm/runtime/ServiceContext.java
+++ b/javatools/src/main/java/org/xvm/runtime/ServiceContext.java
@@ -1515,7 +1515,7 @@ public String toString() {
protected void callUnhandledExceptionHandler(ExceptionHandle hException) {
FunctionHandle hFunction = m_hExceptionHandler;
if (hFunction == null) {
- hFunction = new NativeFunctionHandle((frame, ahArg, iReturn) -> {
+ hFunction = new NativeFunctionHandle(f_container, (frame, ahArg, iReturn) -> {
switch (Utils.callToString(frame, ahArg[0])) {
case Op.R_NEXT -> {
Utils.log(frame, "\nUnhandled exception: " +
diff --git a/javatools/src/main/java/org/xvm/runtime/Utils.java b/javatools/src/main/java/org/xvm/runtime/Utils.java
index ed428dbc68..3658084db3 100644
--- a/javatools/src/main/java/org/xvm/runtime/Utils.java
+++ b/javatools/src/main/java/org/xvm/runtime/Utils.java
@@ -91,7 +91,7 @@ public static void initNative(NativeContainer container) {
ANNOTATION_TEMPLATE_CONSTRUCT = ANNOTATION_TEMPLATE_TEMPLATE.getStructure().findMethod("construct", 2);
ARGUMENT_CONSTRUCT = ARGUMENT_TEMPLATE.getStructure().findMethod("construct", 2);
RT_PARAMETER_CONSTRUCT = RT_PARAMETER_TEMPLATE.getStructure().findMethod("construct", 5);
- LIST_MAP_CONSTRUCT = xListMap.INSTANCE.ensureConstructor();
+ LIST_MAP_CONSTRUCT = container.nativeTemplate(xListMap.class).ensureConstructor();
ANNOTATION_ARRAY_TYPE = pool.ensureArrayType(pool.ensureEcstasyTypeConstant("reflect.Annotation"));
ARGUMENT_ARRAY_TYPE = pool.ensureArrayType(pool.ensureEcstasyTypeConstant("reflect.Argument"));
CONST_HELPER = container.getClassStructure("_native.ConstHelper");
@@ -137,7 +137,8 @@ public static FullyBoundHandle makeFinalizer(Frame frame, MethodStructure constr
return methodFinally == null
? null
- : xRTFunction.makeInternalHandle(frame, methodFinally).bindArguments(ahArg);
+ : xRTFunction.makeInternalHandle(frame.container(), methodFinally).
+ bindArguments(ahArg);
}
/**
@@ -286,7 +287,7 @@ public static ObjectHandle callGetResource(Frame frame, ObjectHandle hInjector,
ObjectHandle[] ahArg = new ObjectHandle[chain.getMaxVars()];
ahArg[0] = type.ensureTypeHandle(frame.f_context.f_container);
- ahArg[1] = xString.makeHandle(sName);
+ ahArg[1] = xString.makeHandle(frame, sName);
iResult = chain.invoke(frame, hInjector, ahArg, Op.A_STACK);
}
@@ -332,7 +333,7 @@ public static ObjectHandle callInject(Frame frame,
ObjectHandle[] ahArg = new ObjectHandle[chain.getMaxVars()];
ahArg[0] = type.ensureTypeHandle(frame.f_context.f_container);
ahArg[1] = ahArg[0];
- ahArg[2] = xString.makeHandle(sName);
+ ahArg[2] = xString.makeHandle(frame, sName);
ahArg[3] = hOpts;
iResult = chain.invoke(frame, hInjector, ahArg, Op.A_STACK);
@@ -874,10 +875,10 @@ private static int constructSingletonHandle(Frame frame, SingletonConstant const
switch (constValue.getFormat()) {
case Module:
- return xModule.INSTANCE.createConstHandle(frame, constValue);
+ return frame.nativeTemplate(xModule.class).createConstHandle(frame, constValue);
case Package:
- return xPackage.INSTANCE.createConstHandle(frame, constValue);
+ return frame.nativeTemplate(xPackage.class).createConstHandle(frame, constValue);
case Property:
return callPropertyInitializer(frame, (PropertyConstant) constValue);
@@ -1543,7 +1544,8 @@ enum Stage {Class, ArgumentArray, ArgumentValue, Argument, Annotation}
*/
public static ArrayHandle makeAnnoArrayHandle(Container container, ObjectHandle[] ahAnno) {
return xArray.makeArrayHandle(
- container.ensureClassComposition(ANNOTATION_ARRAY_TYPE, xArray.INSTANCE),
+ container.ensureClassComposition(ANNOTATION_ARRAY_TYPE,
+ container.nativeTemplate(xArray.class)),
ahAnno.length, ahAnno, Mutability.Constant);
}
@@ -1552,7 +1554,8 @@ public static ArrayHandle makeAnnoArrayHandle(Container container, ObjectHandle[
*/
public static ArrayHandle makeArgumentArrayHandle(Container container, ObjectHandle[] ahArg) {
return xArray.makeArrayHandle(
- container.ensureClassComposition(ARGUMENT_ARRAY_TYPE, xArray.INSTANCE),
+ container.ensureClassComposition(ARGUMENT_ARRAY_TYPE,
+ container.nativeTemplate(xArray.class)),
ahArg.length, ahArg, Mutability.Constant);
}
@@ -1596,8 +1599,8 @@ public int doNext(Frame frameCaller) {
MethodStructure construct = RT_PARAMETER_CONSTRUCT;
ObjectHandle[] ahArg = new ObjectHandle[construct.getMaxVars()];
- ahArg[0] = xInt64.makeHandle(index); // ordinal
- ahArg[1] = sName == null ? xNullable.NULL : xString.makeHandle(sName);
+ ahArg[0] = xInt64.makeHandle(frameCaller, index); // ordinal
+ ahArg[1] = sName == null ? xNullable.NULL : xString.makeHandle(frameCaller, sName);
ahArg[2] = xBoolean.makeHandle(fFormal);
if (constDefault == null) {
ahArg[3] = xBoolean.FALSE;
@@ -1661,7 +1664,7 @@ public static int constructArgument(Frame frame, TypeConstant typeReferent,
MethodStructure constructor = ARGUMENT_CONSTRUCT;
ObjectHandle[] ahArg = new ObjectHandle[constructor.getMaxVars()];
ahArg[0] = hValue;
- ahArg[1] = sName == null ? xNullable.NULL : xString.makeHandle(sName);
+ ahArg[1] = sName == null ? xNullable.NULL : xString.makeHandle(frame, sName);
TypeComposition clzArg = ARGUMENT_TEMPLATE.
ensureParameterizedClass(frame.f_context.f_container, typeReferent);
diff --git a/javatools/src/main/java/org/xvm/runtime/template/Identity.java b/javatools/src/main/java/org/xvm/runtime/template/Identity.java
index c34786466e..23b039e4e3 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/Identity.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/Identity.java
@@ -11,6 +11,7 @@
import org.xvm.runtime.ClassTemplate;
import org.xvm.runtime.Container;
import org.xvm.runtime.Frame;
+import org.xvm.runtime.NativeTemplates;
import org.xvm.runtime.ObjectHandle;
import org.xvm.runtime.TypeComposition;
@@ -22,17 +23,17 @@
*/
public class Identity
extends ClassTemplate {
- public static Identity INSTANCE;
- public static ClassConstant INCEPTION_CLASS;
+ /**
+ * The rebased inception class for this container's Identity template.
+ */
+ private final ClassConstant f_idInception;
- public Identity(Container container, ClassStructure structure, boolean fInstance) {
+ public Identity(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
- if (fInstance) {
- INSTANCE = this;
- INCEPTION_CLASS = new NativeRebaseConstant(
- (ClassConstant) structure.getIdentityConstant());
- }
+ f_idInception = fBaseTemplate
+ ? new NativeRebaseConstant((ClassConstant) structure.getIdentityConstant())
+ : null;
}
@Override
@@ -45,7 +46,7 @@ public void initNative() {
@Override
protected ClassConstant getInceptionClassConstant() {
- return INCEPTION_CLASS;
+ return f_idInception;
}
@Override
@@ -60,7 +61,7 @@ public int invokeNativeN(Frame frame, MethodStructure method, ObjectHandle hTarg
case "hashCode": {
IdentityHandle hId = (IdentityHandle) ahArg[1];
- return frame.assignValue(iReturn, xInt64.makeHandle(hId.hashCode()));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, hId.hashCode()));
}
}
@@ -80,7 +81,8 @@ public int callEquals(Frame frame, TypeComposition clazz,
* Create an identity handle for a mutable or non-hashable object.
*/
public static IdentityHandle ensureIdentity(ObjectHandle h) {
- return new IdentityHandle(INSTANCE.getCanonicalClass(), h);
+ return new IdentityHandle(NativeTemplates.of(h.getComposition()).
+ get(Identity.class).getCanonicalClass(), h);
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/IndexSupport.java b/javatools/src/main/java/org/xvm/runtime/template/IndexSupport.java
index 4b52a55f50..519881775c 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/IndexSupport.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/IndexSupport.java
@@ -7,6 +7,7 @@
import org.xvm.asm.constants.TypeConstant;
+import org.xvm.runtime.Container;
import org.xvm.runtime.Frame;
import org.xvm.runtime.ObjectHandle;
import org.xvm.runtime.ObjectHandle.ExceptionHandle;
@@ -88,9 +89,12 @@ default int makeRef(Frame frame, ObjectHandle hTarget, long lIndex, boolean fRea
try {
TypeConstant typeEl = getElementType(frame, hTarget, lIndex);
- TypeComposition clzRef = fReadOnly
- ? xRef.INSTANCE.ensureParameterizedClass(frame.f_context.f_container, typeEl)
- : xVar.INSTANCE.ensureParameterizedClass(frame.f_context.f_container, typeEl);
+ Container container = frame.container();
+ TypeComposition clzRef = fReadOnly
+ ? container.nativeTemplate(xRef.class).
+ ensureParameterizedClass(container, typeEl)
+ : container.nativeTemplate(xVar.class).
+ ensureParameterizedClass(container, typeEl);
IndexedRefHandle hRef = new IndexedRefHandle(clzRef, hTarget, lIndex);
diff --git a/javatools/src/main/java/org/xvm/runtime/template/Proxy.java b/javatools/src/main/java/org/xvm/runtime/template/Proxy.java
index a936d94af5..16bc69270c 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/Proxy.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/Proxy.java
@@ -32,12 +32,8 @@
*/
public class Proxy
extends xService {
- public static Proxy INSTANCE;
-
public Proxy(Container container) {
- super(container, xObject.INSTANCE.getStructure(), false);
-
- INSTANCE = this;
+ super(container, container.nativeTemplate(xObject.class).getStructure(), false);
}
@Override
@@ -211,7 +207,7 @@ public static ProxyHandle makeHandle(ProxyComposition clzProxy, ServiceContext c
* service boundaries.
*/
private FunctionHandle makeAsyncNativeHandle(ObjectHandle hTarget, MethodStructure method) {
- return new AsyncHandle(INSTANCE.f_container, method) {
+ return new AsyncHandle(f_container, method) {
@Override
protected ObjectHandle getContextTarget(Frame frame, ObjectHandle hService) {
return hTarget;
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/BitBasedDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/BitBasedDelegate.java
index 162d0cd44e..83a46a2243 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/BitBasedDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/BitBasedDelegate.java
@@ -135,7 +135,7 @@ public DelegateHandle fill(DelegateHandle hTarget, int cSize, ObjectHandle hValu
public int getPropertyCapacity(Frame frame, ObjectHandle hTarget, int iReturn) {
BitArrayHandle hDelegate = (BitArrayHandle) hTarget;
- return frame.assignValue(iReturn, xInt64.makeHandle((long) hDelegate.m_abValue.length << 3));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, (long) hDelegate.m_abValue.length << 3));
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/ByteBasedBitView.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/ByteBasedBitView.java
index af2104d8bd..77949a34d5 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/ByteBasedBitView.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/ByteBasedBitView.java
@@ -42,7 +42,7 @@ public DelegateHandle createBitViewDelegate(DelegateHandle hSource, Mutability m
DelegateHandle hView = hSource instanceof ByteArrayHandle hBytes
? new ViewHandle(clzView, hBytes, hBytes.getBitCount(), mutability)
- : xRTViewToBit.INSTANCE.createBitViewDelegate(hSource, mutability);
+ : f_container.nativeTemplate(xRTViewToBit.class).createBitViewDelegate(hSource, mutability);
return slice(hView, hSlice.f_ofStart*8, hSlice.m_cSize*8, false);
}
@@ -53,7 +53,7 @@ public DelegateHandle createBitViewDelegate(DelegateHandle hSource, Mutability m
return hSource instanceof ByteArrayHandle hBytes
? new ViewHandle(clzView, hBytes, hBytes.getBitCount(), mutability)
- : xRTViewToBit.INSTANCE.createBitViewDelegate(hSource, mutability);
+ : f_container.nativeTemplate(xRTViewToBit.class).createBitViewDelegate(hSource, mutability);
}
@@ -66,7 +66,7 @@ protected DelegateHandle createCopyImpl(DelegateHandle hTarget, Mutability mutab
byte[] abBits = getBits(hView, ofStart, cSize, fReverse);
- return xRTBitDelegate.INSTANCE.makeHandle(abBits, cSize, mutability);
+ return f_container.nativeTemplate(xRTBitDelegate.class).makeHandle(abBits, cSize, mutability);
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/ByteBasedDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/ByteBasedDelegate.java
index e2e313a4c4..965337b5ee 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/ByteBasedDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/ByteBasedDelegate.java
@@ -13,6 +13,7 @@
import org.xvm.runtime.ClassTemplate;
import org.xvm.runtime.Container;
import org.xvm.runtime.Frame;
+import org.xvm.runtime.NativeTemplates;
import org.xvm.runtime.ObjectHandle;
import org.xvm.runtime.ObjectHandle.JavaLong;
import org.xvm.runtime.TypeComposition;
@@ -70,7 +71,7 @@ public DelegateHandle fill(DelegateHandle hTarget, int cSize, ObjectHandle hValu
public int getPropertyCapacity(Frame frame, ObjectHandle hTarget, int iReturn) {
ByteArrayHandle hDelegate = (ByteArrayHandle) hTarget;
- return frame.assignValue(iReturn, xInt64.makeHandle(hDelegate.m_abValue.length));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, hDelegate.m_abValue.length));
}
@Override
@@ -198,7 +199,7 @@ public int invokeIndexOf(Frame frame, DelegateHandle hTarget, DelegateHandle hTh
if (cbThat == 0) {
return ofStart > cbThis
? frame.assignValue(aiReturn[0], xBoolean.FALSE)
- : frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(ofStart));
+ : frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(frame, ofStart));
}
if (ofStart > cbThis - cbThat) {
return frame.assignValue(aiReturn[0], xBoolean.FALSE);
@@ -213,7 +214,7 @@ public int invokeIndexOf(Frame frame, DelegateHandle hTarget, DelegateHandle hTh
continue Next;
}
}
- return frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(of));
+ return frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(frame, of));
}
}
return frame.assignValue(aiReturn[0], xBoolean.FALSE);
@@ -435,8 +436,10 @@ public boolean checkAssign(ObjectHandle hValue) {
return switch (getTemplate()) {
case xRTBitDelegate _ -> templateValue == xBit.ZERO.getTemplate();
case xRTBooleanDelegate _ -> templateValue == xBoolean.TRUE.getTemplate();
- case xRTInt8Delegate _ -> templateValue == xInt8.INSTANCE;
- case xRTUInt8Delegate _ -> templateValue == xUInt8.INSTANCE;
+ case xRTInt8Delegate _ ->
+ templateValue == NativeTemplates.of(getComposition()).get(xInt8.class);
+ case xRTUInt8Delegate _ ->
+ templateValue == NativeTemplates.of(getComposition()).get(xUInt8.class);
default -> super.checkAssign(hValue);
};
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongBasedBitView.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongBasedBitView.java
index 79bae355ec..4e421a55b9 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongBasedBitView.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongBasedBitView.java
@@ -25,8 +25,6 @@
public abstract class LongBasedBitView
extends xRTViewToBit
implements BitView {
- public static LongBasedBitView INSTANCE;
-
public LongBasedBitView(Container container, ClassStructure structure, int nBitsPerValue) {
super(container, structure, false);
@@ -66,7 +64,7 @@ protected DelegateHandle createCopyImpl(DelegateHandle hTarget, Mutability mutab
byte[] abBits = getBits(hView, ofStart, cSize, fReverse);
- return xRTBitDelegate.INSTANCE.makeHandle(abBits, cSize, mutability);
+ return f_container.nativeTemplate(xRTBitDelegate.class).makeHandle(abBits, cSize, mutability);
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongBasedDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongBasedDelegate.java
index aa9fbb5ecf..e1faa0b373 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongBasedDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongBasedDelegate.java
@@ -11,6 +11,7 @@
import org.xvm.runtime.ClassTemplate;
import org.xvm.runtime.Container;
import org.xvm.runtime.Frame;
+import org.xvm.runtime.NativeTemplates;
import org.xvm.runtime.ObjectHandle;
import org.xvm.runtime.ObjectHandle.JavaLong;
import org.xvm.runtime.TypeComposition;
@@ -101,7 +102,7 @@ public int getPropertyCapacity(Frame frame, ObjectHandle hTarget, int iReturn) {
LongArrayHandle hDelegate = (LongArrayHandle) hTarget;
return frame.assignValue(iReturn,
- xInt64.makeHandle((long) hDelegate.m_alValue.length * f_nValuesPerLong));
+ xInt64.makeHandle(frame, (long) hDelegate.m_alValue.length * f_nValuesPerLong));
}
@Override
@@ -577,15 +578,15 @@ protected void purgeUnusedSpace() {
public boolean checkAssign(ObjectHandle hValue) {
ClassTemplate templateValue = hValue.getTemplate();
return switch (getTemplate()) {
- case xRTInt16Delegate _ -> templateValue == xInt16.INSTANCE;
- case xRTUInt16Delegate _ -> templateValue == xUInt16.INSTANCE;
- case xRTInt32Delegate _ -> templateValue == xInt32.INSTANCE;
- case xRTUInt32Delegate _ -> templateValue == xUInt32.INSTANCE;
- case xRTInt64Delegate _ -> templateValue == xInt64.INSTANCE;
- case xRTUInt64Delegate _ -> templateValue == xUInt64.INSTANCE;
- case xRTInt128Delegate _ -> templateValue == xInt128.INSTANCE;
- case xRTUInt128Delegate _ -> templateValue == xUInt128.INSTANCE;
- case xRTNibbleDelegate _ -> templateValue == xNibble.INSTANCE;
+ case xRTInt16Delegate _ -> templateValue == NativeTemplates.of(getComposition()).get(xInt16.class);
+ case xRTUInt16Delegate _ -> templateValue == NativeTemplates.of(getComposition()).get(xUInt16.class);
+ case xRTInt32Delegate _ -> templateValue == NativeTemplates.of(getComposition()).get(xInt32.class);
+ case xRTUInt32Delegate _ -> templateValue == NativeTemplates.of(getComposition()).get(xUInt32.class);
+ case xRTInt64Delegate _ -> templateValue == NativeTemplates.of(getComposition()).get(xInt64.class);
+ case xRTUInt64Delegate _ -> templateValue == NativeTemplates.of(getComposition()).get(xUInt64.class);
+ case xRTInt128Delegate _ -> templateValue == NativeTemplates.of(getComposition()).get(xInt128.class);
+ case xRTUInt128Delegate _ -> templateValue == NativeTemplates.of(getComposition()).get(xUInt128.class);
+ case xRTNibbleDelegate _ -> templateValue == NativeTemplates.of(getComposition()).get(xNibble.class);
default -> hValue.getType().isA(getElementType());
};
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongDelegate.java
index 709470a062..30e52974ef 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongDelegate.java
@@ -17,8 +17,6 @@
*/
public abstract class LongDelegate
extends LongBasedDelegate {
- public static LongDelegate INSTANCE;
-
public LongDelegate(Container container, ClassStructure structure, boolean fSigned) {
super(container, structure, 64, fSigned);
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongLongDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongLongDelegate.java
index d726c2923c..57b06e3aca 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongLongDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/LongLongDelegate.java
@@ -30,8 +30,6 @@
*/
public abstract class LongLongDelegate
extends xRTDelegate {
- public static LongLongDelegate INSTANCE;
-
public LongLongDelegate(Container container, ClassStructure structure, boolean fSigned) {
super(container, structure, false);
@@ -78,7 +76,7 @@ public int getPropertyCapacity(Frame frame, ObjectHandle hTarget, int iReturn) {
LongArrayHandle hDelegate = (LongArrayHandle) hTarget;
return frame.assignValue(iReturn,
- xInt64.makeHandle((long) hDelegate.m_alValue.length / 2));
+ xInt64.makeHandle(frame, hDelegate.m_alValue.length / 2));
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTBitDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTBitDelegate.java
index 33082f42dd..d97241f35e 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTBitDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTBitDelegate.java
@@ -20,14 +20,8 @@
*/
public class xRTBitDelegate
extends BitBasedDelegate {
- public static xRTBitDelegate INSTANCE;
-
- public xRTBitDelegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTBitDelegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTBooleanDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTBooleanDelegate.java
index d8395726d7..b50a146ee3 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTBooleanDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTBooleanDelegate.java
@@ -20,14 +20,8 @@
*/
public class xRTBooleanDelegate
extends BitBasedDelegate {
- public static xRTBooleanDelegate INSTANCE;
-
- public xRTBooleanDelegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTBooleanDelegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTCharDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTCharDelegate.java
index 2476d732db..5bb2c557cf 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTCharDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTCharDelegate.java
@@ -11,6 +11,7 @@
import org.xvm.runtime.Container;
import org.xvm.runtime.Frame;
+import org.xvm.runtime.NativeTemplates;
import org.xvm.runtime.ObjectHandle;
import org.xvm.runtime.ObjectHandle.JavaLong;
import org.xvm.runtime.TypeComposition;
@@ -30,14 +31,8 @@
*/
public class xRTCharDelegate
extends xRTDelegate {
- public static xRTCharDelegate INSTANCE;
-
- public xRTCharDelegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTCharDelegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -81,7 +76,7 @@ public int invokePreInc(Frame frame, ObjectHandle hTarget, long lIndex, int iRet
--hDelegate.m_achValue[(int) lIndex];
return overflow(frame);
}
- return frame.assignValue(iReturn, xChar.makeHandle(chValue+1));
+ return frame.assignValue(iReturn, xChar.makeHandle(frame, chValue+1));
}
@Override
@@ -98,7 +93,7 @@ public int invokePreDec(Frame frame, ObjectHandle hTarget, long lIndex, int iRet
++hDelegate.m_achValue[(int) lIndex];
return overflow(frame);
}
- return frame.assignValue(iReturn, xChar.makeHandle(chValue-1));
+ return frame.assignValue(iReturn, xChar.makeHandle(frame, chValue-1));
}
@Override
@@ -114,7 +109,7 @@ public int invokePostInc(Frame frame, ObjectHandle hTarget, long lIndex, int iRe
--hDelegate.m_achValue[(int) lIndex];
return overflow(frame);
}
- return frame.assignValue(iReturn, xChar.makeHandle(chValue));
+ return frame.assignValue(iReturn, xChar.makeHandle(frame, chValue));
}
@Override
@@ -130,7 +125,7 @@ public int invokePostDec(Frame frame, ObjectHandle hTarget, long lIndex, int iRe
++hDelegate.m_achValue[(int) lIndex];
return overflow(frame);
}
- return frame.assignValue(iReturn, xChar.makeHandle(chValue));
+ return frame.assignValue(iReturn, xChar.makeHandle(frame, chValue));
}
@Override
@@ -146,7 +141,7 @@ public DelegateHandle fill(DelegateHandle hTarget, int cSize, ObjectHandle hValu
public int getPropertyCapacity(Frame frame, ObjectHandle hTarget, int iReturn) {
CharArrayHandle hDelegate = (CharArrayHandle) hTarget;
- return frame.assignValue(iReturn, xInt64.makeHandle(hDelegate.m_achValue.length));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, hDelegate.m_achValue.length));
}
@Override
@@ -214,7 +209,7 @@ protected DelegateHandle createCopyImpl(DelegateHandle hTarget, Mutability mutab
protected int extractArrayValueImpl(Frame frame, DelegateHandle hTarget, long lIndex, int iReturn) {
CharArrayHandle hDelegate = (CharArrayHandle) hTarget;
- return frame.assignValue(iReturn, xChar.makeHandle(hDelegate.m_achValue[(int) lIndex]));
+ return frame.assignValue(iReturn, xChar.makeHandle(frame, hDelegate.m_achValue[(int) lIndex]));
}
@Override
@@ -300,7 +295,7 @@ public int invokeIndexOf(Frame frame, DelegateHandle hTarget, DelegateHandle hTh
if (cchThat == 0) {
return ofStart > cchThis
? frame.assignValue(aiReturn[0], xBoolean.FALSE)
- : frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(ofStart));
+ : frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(frame, ofStart));
}
if (ofStart > cchThis - cchThat) {
return frame.assignValue(aiReturn[0], xBoolean.FALSE);
@@ -315,7 +310,7 @@ public int invokeIndexOf(Frame frame, DelegateHandle hTarget, DelegateHandle hTh
continue Next;
}
}
- return frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(of));
+ return frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(frame, of));
}
}
return frame.assignValue(aiReturn[0], xBoolean.FALSE);
@@ -384,7 +379,8 @@ protected void purgeUnusedSpace() {
@Override
public boolean checkAssign(ObjectHandle hValue) {
- return hValue.getTemplate() == xChar.INSTANCE;
+ return hValue.getTemplate()
+ == NativeTemplates.of(getComposition()).get(xChar.class);
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTDelegate.java
index 3e26496331..f524a89be7 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTDelegate.java
@@ -42,19 +42,13 @@
public class xRTDelegate
extends ClassTemplate
implements IndexSupport {
- public static xRTDelegate INSTANCE;
-
- public xRTDelegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTDelegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
public void registerNativeTemplates() {
- if (this == INSTANCE) {
+ if (isNativeInstance(xRTDelegate.class)) {
registerNativeTemplate(new xRTNibbleDelegate (f_container, f_struct, true));
registerNativeTemplate(new xRTBooleanDelegate (f_container, f_struct, true));
@@ -82,33 +76,33 @@ public void registerNativeTemplates() {
@Override
public void initNative() {
- if (this == INSTANCE) {
+ if (isNativeInstance(xRTDelegate.class)) {
// register native delegations
ConstantPool pool = pool();
Map mapDelegates = new HashMap<>();
- mapDelegates.put(pool.typeNibble(), xRTNibbleDelegate .INSTANCE);
+ mapDelegates.put(pool.typeNibble(), f_container.nativeTemplate(xRTNibbleDelegate.class));
- mapDelegates.put(pool.typeBoolean(), xRTBooleanDelegate.INSTANCE);
- mapDelegates.put(pool.typeBit(), xRTBitDelegate .INSTANCE);
- mapDelegates.put(pool.typeChar(), xRTCharDelegate .INSTANCE);
+ mapDelegates.put(pool.typeBoolean(), f_container.nativeTemplate(xRTBooleanDelegate.class));
+ mapDelegates.put(pool.typeBit(), f_container.nativeTemplate(xRTBitDelegate.class));
+ mapDelegates.put(pool.typeChar(), f_container.nativeTemplate(xRTCharDelegate.class));
- mapDelegates.put(pool.typeInt8(), xRTInt8Delegate .INSTANCE);
- mapDelegates.put(pool.typeInt16(), xRTInt16Delegate .INSTANCE);
- mapDelegates.put(pool.typeInt32(), xRTInt32Delegate .INSTANCE);
- mapDelegates.put(pool.typeInt64(), xRTInt64Delegate .INSTANCE);
- mapDelegates.put(pool.typeInt128(), xRTInt128Delegate .INSTANCE);
+ mapDelegates.put(pool.typeInt8(), f_container.nativeTemplate(xRTInt8Delegate.class));
+ mapDelegates.put(pool.typeInt16(), f_container.nativeTemplate(xRTInt16Delegate.class));
+ mapDelegates.put(pool.typeInt32(), f_container.nativeTemplate(xRTInt32Delegate.class));
+ mapDelegates.put(pool.typeInt64(), f_container.nativeTemplate(xRTInt64Delegate.class));
+ mapDelegates.put(pool.typeInt128(), f_container.nativeTemplate(xRTInt128Delegate.class));
- mapDelegates.put(pool.typeNibble(), xRTNibbleDelegate .INSTANCE);
- mapDelegates.put(pool.typeUInt8(), xRTUInt8Delegate .INSTANCE);
- mapDelegates.put(pool.typeUInt16(), xRTUInt16Delegate .INSTANCE);
- mapDelegates.put(pool.typeUInt32(), xRTUInt32Delegate .INSTANCE);
- mapDelegates.put(pool.typeUInt64(), xRTUInt64Delegate .INSTANCE);
- mapDelegates.put(pool.typeUInt128(), xRTUInt128Delegate.INSTANCE);
+ mapDelegates.put(pool.typeNibble(), f_container.nativeTemplate(xRTNibbleDelegate.class));
+ mapDelegates.put(pool.typeUInt8(), f_container.nativeTemplate(xRTUInt8Delegate.class));
+ mapDelegates.put(pool.typeUInt16(), f_container.nativeTemplate(xRTUInt16Delegate.class));
+ mapDelegates.put(pool.typeUInt32(), f_container.nativeTemplate(xRTUInt32Delegate.class));
+ mapDelegates.put(pool.typeUInt64(), f_container.nativeTemplate(xRTUInt64Delegate.class));
+ mapDelegates.put(pool.typeUInt128(), f_container.nativeTemplate(xRTUInt128Delegate.class));
- mapDelegates.put(pool.typeFloat64(), xRTFloat64Delegate.INSTANCE);
+ mapDelegates.put(pool.typeFloat64(), f_container.nativeTemplate(xRTFloat64Delegate.class));
- mapDelegates.put(pool.typeString(), xRTStringDelegate .INSTANCE);
+ mapDelegates.put(pool.typeString(), f_container.nativeTemplate(xRTStringDelegate.class));
DELEGATES = mapDelegates;
@@ -146,7 +140,7 @@ public TypeComposition ensureParameterizedClass(Container container, TypeConstan
@Override
public ClassTemplate getTemplate(TypeConstant type) {
- return getArrayTemplate(type.getParamType(0));
+ return getArrayTemplate(f_container, type.getParamType(0));
}
/**
@@ -319,7 +313,7 @@ public boolean compareIdentity(ObjectHandle hValue1, ObjectHandle hValue2) {
protected int getPropertyCapacity(Frame frame, ObjectHandle hTarget, int iReturn) {
GenericArrayDelegate hDelegate = (GenericArrayDelegate) hTarget;
- return frame.assignValue(iReturn, xInt64.makeHandle(hDelegate.m_ahValue.length));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, hDelegate.m_ahValue.length));
}
/**
@@ -352,7 +346,7 @@ protected int setPropertyCapacity(Frame frame, ObjectHandle hTarget, long nCapac
protected int getPropertySize(Frame frame, ObjectHandle hTarget, int iReturn) {
DelegateHandle hDelegate = (DelegateHandle) hTarget;
- return frame.assignValue(iReturn, xInt64.makeHandle(hDelegate.m_cSize));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, hDelegate.m_cSize));
}
/**
@@ -437,7 +431,7 @@ public int invokeIndexOf(Frame frame, DelegateHandle hTarget, DelegateHandle hTh
public DelegateHandle slice(DelegateHandle hTarget, long ofStart, long cSize, boolean fReverse) {
return ofStart == 0 && cSize == hTarget.m_cSize && !fReverse
? hTarget
- : xRTSlicingDelegate.INSTANCE.makeHandle(hTarget, ofStart, cSize, fReverse);
+ : f_container.nativeTemplate(xRTSlicingDelegate.class).makeHandle(hTarget, ofStart, cSize, fReverse);
}
/**
@@ -716,9 +710,11 @@ protected void deleteRangeImpl(DelegateHandle hTarget, long lIndex, long cDelete
// ----- helper methods ------------------------------------------------------------------------
- public static xRTDelegate getArrayTemplate(TypeConstant typeParam) {
+ public static xRTDelegate getArrayTemplate(Container container, TypeConstant typeParam) {
xRTDelegate template = DELEGATES.get(typeParam);
- return template == null ? INSTANCE : template;
+ return template == null
+ ? container.nativeTemplate(xRTDelegate.class)
+ : template;
}
private static ObjectHandle[] reverse(ObjectHandle[] ahValue, int cSize) {
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTFloat64Delegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTFloat64Delegate.java
index 51ca6181a2..fdeba84510 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTFloat64Delegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTFloat64Delegate.java
@@ -10,6 +10,7 @@
import org.xvm.runtime.Container;
import org.xvm.runtime.Frame;
+import org.xvm.runtime.NativeTemplates;
import org.xvm.runtime.ObjectHandle;
import org.xvm.runtime.TypeComposition;
@@ -28,14 +29,8 @@
*/
public class xRTFloat64Delegate
extends xRTDelegate {
- public static xRTFloat64Delegate INSTANCE;
-
- public xRTFloat64Delegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTFloat64Delegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -78,7 +73,7 @@ public DelegateHandle fill(DelegateHandle hTarget, int cSize, ObjectHandle hValu
public int getPropertyCapacity(Frame frame, ObjectHandle hTarget, int iReturn) {
DoubleArrayHandle hDelegate = (DoubleArrayHandle) hTarget;
- return frame.assignValue(iReturn, xInt64.makeHandle(hDelegate.m_adValue.length));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, hDelegate.m_adValue.length));
}
@Override
@@ -127,7 +122,7 @@ protected int extractArrayValueImpl(Frame frame, DelegateHandle hTarget, long lI
DoubleArrayHandle hDelegate = (DoubleArrayHandle) hTarget;
return frame.assignValue(iReturn,
- xFloat64.INSTANCE.makeHandle(hDelegate.m_adValue[(int) lIndex]));
+ f_container.nativeTemplate(xFloat64.class).makeHandle(hDelegate.m_adValue[(int) lIndex]));
}
@Override
@@ -304,7 +299,8 @@ protected void purgeUnusedSpace() {
@Override
public boolean checkAssign(ObjectHandle hValue) {
- return hValue.getTemplate() == xFloat64.INSTANCE;
+ return hValue.getTemplate()
+ == NativeTemplates.of(getComposition()).get(xFloat64.class);
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt128Delegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt128Delegate.java
index 2477e44d40..54a2a94b67 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt128Delegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt128Delegate.java
@@ -18,14 +18,8 @@
*/
public class xRTInt128Delegate
extends LongLongDelegate {
- public static xRTInt128Delegate INSTANCE;
-
- public xRTInt128Delegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTInt128Delegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, true);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -42,6 +36,6 @@ public TypeConstant getCanonicalType() {
@Override
protected ObjectHandle makeElementHandle(LongLong ll) {
- return xInt128.INSTANCE.makeHandle(ll);
+ return f_container.nativeTemplate(xInt128.class).makeHandle(ll);
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt16Delegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt16Delegate.java
index 7a4b35c532..99ad9c46cb 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt16Delegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt16Delegate.java
@@ -20,14 +20,8 @@
public class xRTInt16Delegate
extends LongBasedDelegate
implements ByteView {
- public static xRTInt16Delegate INSTANCE;
-
- public xRTInt16Delegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTInt16Delegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 16, true);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -44,7 +38,7 @@ public TypeConstant getCanonicalType() {
@Override
protected ObjectHandle makeElementHandle(long lValue) {
- return xInt16.INSTANCE.makeJavaLong(lValue);
+ return f_container.nativeTemplate(xInt16.class).makeJavaLong(lValue);
}
/**
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt32Delegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt32Delegate.java
index b2522cfd48..df680f4098 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt32Delegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt32Delegate.java
@@ -20,14 +20,8 @@
public class xRTInt32Delegate
extends LongBasedDelegate
implements ByteView {
- public static xRTInt32Delegate INSTANCE;
-
- public xRTInt32Delegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTInt32Delegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 32, true);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -44,7 +38,7 @@ public TypeConstant getCanonicalType() {
@Override
protected ObjectHandle makeElementHandle(long lValue) {
- return xInt32.INSTANCE.makeJavaLong(lValue);
+ return f_container.nativeTemplate(xInt32.class).makeJavaLong(lValue);
}
/**
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt64Delegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt64Delegate.java
index b494e6b1d0..73ee4046f3 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt64Delegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt64Delegate.java
@@ -17,14 +17,8 @@
*/
public class xRTInt64Delegate
extends LongDelegate {
- public static xRTInt64Delegate INSTANCE;
-
- public xRTInt64Delegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTInt64Delegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, true);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -41,6 +35,6 @@ public TypeConstant getCanonicalType() {
@Override
protected ObjectHandle makeElementHandle(long lValue) {
- return xInt64.INSTANCE.makeJavaLong(lValue);
+ return f_container.nativeTemplate(xInt64.class).makeJavaLong(lValue);
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt8Delegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt8Delegate.java
index bbd387d755..ce54fe9567 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt8Delegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTInt8Delegate.java
@@ -18,14 +18,8 @@
public class xRTInt8Delegate
extends ByteBasedDelegate
implements ByteView {
- public static xRTInt8Delegate INSTANCE;
-
- public xRTInt8Delegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTInt8Delegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, Byte.MIN_VALUE, Byte.MAX_VALUE);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -42,6 +36,6 @@ public TypeConstant getCanonicalType() {
@Override
protected ObjectHandle makeElementHandle(long lValue) {
- return xInt8.INSTANCE.makeJavaLong(lValue);
+ return f_container.nativeTemplate(xInt8.class).makeJavaLong(lValue);
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTNibbleDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTNibbleDelegate.java
index b08464f111..3a1c905d81 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTNibbleDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTNibbleDelegate.java
@@ -19,14 +19,8 @@
public class xRTNibbleDelegate
extends LongBasedDelegate
implements ByteView {
- public static xRTNibbleDelegate INSTANCE;
-
- public xRTNibbleDelegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTNibbleDelegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 4, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -43,7 +37,7 @@ public TypeConstant getCanonicalType() {
@Override
protected ObjectHandle makeElementHandle(long lValue) {
- return xNibble.INSTANCE.makeJavaLong(lValue);
+ return f_container.nativeTemplate(xNibble.class).makeJavaLong(lValue);
}
/**
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTSlicingDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTSlicingDelegate.java
index 00553e9a37..9f11ccf074 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTSlicingDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTSlicingDelegate.java
@@ -22,14 +22,8 @@
*/
public class xRTSlicingDelegate
extends xRTDelegate {
- public static xRTSlicingDelegate INSTANCE;
-
- public xRTSlicingDelegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTSlicingDelegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTStringDelegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTStringDelegate.java
index c959bc7c30..5eb82265e1 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTStringDelegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTStringDelegate.java
@@ -31,14 +31,8 @@
*/
public class xRTStringDelegate
extends xRTDelegate {
- public static xRTStringDelegate INSTANCE;
-
- public xRTStringDelegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTStringDelegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
// ----- RTDelegate API ------------------------------------------------------------------------
@@ -80,7 +74,7 @@ public DelegateHandle fill(DelegateHandle hTarget, int cSize, ObjectHandle hValu
public int getPropertyCapacity(Frame frame, ObjectHandle hTarget, int iReturn) {
StringArrayHandle hDelegate = (StringArrayHandle) hTarget;
- return frame.assignValue(iReturn, xInt64.makeHandle(hDelegate.m_asValue.length));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, hDelegate.m_asValue.length));
}
@Override
@@ -123,7 +117,7 @@ protected int extractArrayValueImpl(Frame frame, DelegateHandle hTarget, long lI
StringArrayHandle hDelegate = (StringArrayHandle) hTarget;
String s = hDelegate.m_asValue[(int) lIndex];
- return frame.assignValue(iReturn, xString.makeHandle(s));
+ return frame.assignValue(iReturn, xString.makeHandle(frame, s));
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt128Delegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt128Delegate.java
index c24e487897..c270f26825 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt128Delegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt128Delegate.java
@@ -18,14 +18,8 @@
*/
public class xRTUInt128Delegate
extends LongLongDelegate {
- public static xRTUInt128Delegate INSTANCE;
-
- public xRTUInt128Delegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTUInt128Delegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -42,6 +36,6 @@ public TypeConstant getCanonicalType() {
@Override
protected ObjectHandle makeElementHandle(LongLong ll) {
- return xUInt128.INSTANCE.makeHandle(ll);
+ return f_container.nativeTemplate(xUInt128.class).makeHandle(ll);
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt16Delegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt16Delegate.java
index 70eee34c95..d85719de92 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt16Delegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt16Delegate.java
@@ -18,14 +18,8 @@
public class xRTUInt16Delegate
extends LongBasedDelegate
implements ByteView {
- public static xRTUInt16Delegate INSTANCE;
-
- public xRTUInt16Delegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTUInt16Delegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 16, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -42,6 +36,6 @@ public TypeConstant getCanonicalType() {
@Override
protected ObjectHandle makeElementHandle(long lValue) {
- return xUInt16.INSTANCE.makeJavaLong(lValue);
+ return f_container.nativeTemplate(xUInt16.class).makeJavaLong(lValue);
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt32Delegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt32Delegate.java
index c8c3ee2eb3..9f390c0af0 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt32Delegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt32Delegate.java
@@ -18,14 +18,8 @@
public class xRTUInt32Delegate
extends LongBasedDelegate
implements ByteView {
- public static xRTUInt32Delegate INSTANCE;
-
- public xRTUInt32Delegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTUInt32Delegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 32, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -42,6 +36,6 @@ public TypeConstant getCanonicalType() {
@Override
protected ObjectHandle makeElementHandle(long lValue) {
- return xUInt32.INSTANCE.makeJavaLong(lValue);
+ return f_container.nativeTemplate(xUInt32.class).makeJavaLong(lValue);
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt64Delegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt64Delegate.java
index 48d6c446b9..6df0e2e1b0 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt64Delegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt64Delegate.java
@@ -17,14 +17,8 @@
*/
public class xRTUInt64Delegate
extends LongDelegate {
- public static xRTUInt64Delegate INSTANCE;
-
- public xRTUInt64Delegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTUInt64Delegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -41,6 +35,6 @@ public TypeConstant getCanonicalType() {
@Override
protected ObjectHandle makeElementHandle(long lValue) {
- return xUInt64.INSTANCE.makeJavaLong(lValue);
+ return f_container.nativeTemplate(xUInt64.class).makeJavaLong(lValue);
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt8Delegate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt8Delegate.java
index be799a169a..d3f7fb2538 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt8Delegate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTUInt8Delegate.java
@@ -7,6 +7,7 @@
import org.xvm.asm.constants.TypeConstant;
import org.xvm.runtime.Container;
+import org.xvm.runtime.NativeTemplates;
import org.xvm.runtime.ObjectHandle;
import org.xvm.runtime.template.numbers.xUInt8;
@@ -18,14 +19,8 @@
public class xRTUInt8Delegate
extends ByteBasedDelegate
implements ByteView {
- public static xRTUInt8Delegate INSTANCE;
-
- public xRTUInt8Delegate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTUInt8Delegate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, (byte) 0, (byte) 0xFF);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -42,13 +37,14 @@ public TypeConstant getCanonicalType() {
@Override
protected ObjectHandle makeElementHandle(long lValue) {
- return xUInt8.INSTANCE.makeJavaLong(lValue);
+ return f_container.nativeTemplate(xUInt8.class).makeJavaLong(lValue);
}
/**
* Obtain an array of bytes from the specified ByteArrayHandle.
*/
public static byte[] getBytes(ByteArrayHandle hDelegate) {
- return INSTANCE.getBytes(hDelegate, 0, hDelegate.m_cSize, false);
+ return NativeTemplates.of(hDelegate.getComposition()).get(xRTUInt8Delegate.class).
+ getBytes(hDelegate, 0, hDelegate.m_cSize, false);
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBit.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBit.java
index 6017d17351..500eb02ac4 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBit.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBit.java
@@ -16,19 +16,13 @@
public class xRTViewFromBit
extends xRTView
implements ByteView {
- public static xRTViewFromBit INSTANCE;
-
- public xRTViewFromBit(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewFromBit(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
public void registerNativeTemplates() {
- if (this == INSTANCE) {
+ if (isNativeInstance(xRTViewFromBit.class)) {
registerNativeTemplate(new xRTViewFromBitToBoolean (f_container, f_struct, true));
registerNativeTemplate(new xRTViewFromBitToByte (f_container, f_struct, true));
registerNativeTemplate(new xRTViewFromBitToNibble (f_container, f_struct, true));
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToBoolean.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToBoolean.java
index 7478935596..3165da286d 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToBoolean.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToBoolean.java
@@ -25,14 +25,8 @@
*/
public class xRTViewFromBitToBoolean
extends xRTViewFromBit {
- public static xRTViewFromBitToBoolean INSTANCE;
-
- public xRTViewFromBitToBoolean(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewFromBitToBoolean(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -73,7 +67,7 @@ protected DelegateHandle createCopyImpl(DelegateHandle hTarget, Mutability mutab
if (tSource instanceof BitView tView) {
byte[] abBits = tView.getBytes(hSource, ofStart, cSize, fReverse);
- return xRTBooleanDelegate.INSTANCE.makeHandle(abBits, cSize, mutability);
+ return f_container.nativeTemplate(xRTBooleanDelegate.class).makeHandle(abBits, cSize, mutability);
}
throw new UnsupportedOperationException();
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToByte.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToByte.java
index 7539056484..6b50a9b523 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToByte.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToByte.java
@@ -26,14 +26,8 @@
*/
public class xRTViewFromBitToByte
extends xRTViewFromBit {
- public static xRTViewFromBitToByte INSTANCE;
-
- public xRTViewFromBitToByte(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewFromBitToByte(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -86,7 +80,7 @@ protected DelegateHandle createCopyImpl(DelegateHandle hTarget, Mutability mutab
if (tSource instanceof ByteView tView) {
byte[] abBits = tView.getBytes(hSource, ofStart, cSize, fReverse);
- return xRTUInt8Delegate.INSTANCE.makeHandle(abBits, cSize, mutability);
+ return f_container.nativeTemplate(xRTUInt8Delegate.class).makeHandle(abBits, cSize, mutability);
}
throw new UnsupportedOperationException();
@@ -101,7 +95,7 @@ protected int extractArrayValueImpl(Frame frame, DelegateHandle hTarget, long lI
if (tSource instanceof ByteView tView) {
// the underlying delegate is a BitView, which is a ByteView
return frame.assignValue(iReturn,
- xUInt8.INSTANCE.makeJavaLong(tView.extractByte(hSource, lIndex)));
+ f_container.nativeTemplate(xUInt8.class).makeJavaLong(tView.extractByte(hSource, lIndex)));
}
throw new UnsupportedOperationException();
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToNibble.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToNibble.java
index ea9e35db3f..a17bbd9b20 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToNibble.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromBitToNibble.java
@@ -26,14 +26,8 @@
*/
public class xRTViewFromBitToNibble
extends xRTViewFromBit {
- public static xRTViewFromBitToNibble INSTANCE;
-
- public xRTViewFromBitToNibble(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewFromBitToNibble(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -70,7 +64,7 @@ protected DelegateHandle createCopyImpl(DelegateHandle hTarget, Mutability mutab
if (tSource instanceof BitView tView) {
byte[] abBits = tView.getBytes(hSource, ofStart/2, cSize/2, fReverse);
- return xRTNibbleDelegate.INSTANCE.packHandle(abBits, mutability);
+ return f_container.nativeTemplate(xRTNibbleDelegate.class).packHandle(abBits, mutability);
}
throw new UnsupportedOperationException();
@@ -90,7 +84,7 @@ protected int extractArrayValueImpl(Frame frame, DelegateHandle hTarget, long lI
} else {
nNibble = nNibble & 0x0F;
}
- return frame.assignValue(iReturn, xNibble.INSTANCE.makeJavaLong(nNibble));
+ return frame.assignValue(iReturn, f_container.nativeTemplate(xNibble.class).makeJavaLong(nNibble));
}
throw new UnsupportedOperationException();
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByte.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByte.java
index 741e4eb5f5..eabc006f29 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByte.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByte.java
@@ -17,19 +17,13 @@
*/
public class xRTViewFromByte
extends xRTView {
- public static xRTViewFromByte INSTANCE;
-
- public xRTViewFromByte(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewFromByte(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
public void registerNativeTemplates() {
- if (this == INSTANCE) {
+ if (isNativeInstance(xRTViewFromByte.class)) {
registerNativeTemplate(new xRTViewFromByteToInt8 (f_container, f_struct, true));
registerNativeTemplate(new xRTViewFromByteToInt16 (f_container, f_struct, true));
registerNativeTemplate(new xRTViewFromByteToInt64 (f_container, f_struct, true));
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToFloat64.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToFloat64.java
index 90edbbc1c6..60c9b68ebc 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToFloat64.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToFloat64.java
@@ -24,14 +24,8 @@
*/
public class xRTViewFromByteToFloat64
extends xRTViewFromByte {
- public static xRTViewFromByteToFloat64 INSTANCE;
-
- public xRTViewFromByteToFloat64(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewFromByteToFloat64(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -59,7 +53,7 @@ protected DelegateHandle createCopyImpl(DelegateHandle hTarget, Mutability mutab
adValue[i] = Double.longBitsToDouble(Handy.byteArrayToLong(ab, 0));
}
- return xRTFloat64Delegate.INSTANCE.makeHandle(adValue, adValue.length, mutability);
+ return f_container.nativeTemplate(xRTFloat64Delegate.class).makeHandle(adValue, adValue.length, mutability);
}
throw new UnsupportedOperationException();
@@ -75,7 +69,7 @@ protected int extractArrayValueImpl(Frame frame, DelegateHandle hTarget, long lI
byte[] ab = tView.getBytes(hSource, lIndex*8, 8, false);
double d = Double.longBitsToDouble(Handy.byteArrayToLong(ab, 0));
- return frame.assignValue(iReturn, xFloat64.INSTANCE.makeHandle(d));
+ return frame.assignValue(iReturn, f_container.nativeTemplate(xFloat64.class).makeHandle(d));
}
throw new UnsupportedOperationException();
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt16.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt16.java
index 37216f5485..ed9ce06e4d 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt16.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt16.java
@@ -23,14 +23,8 @@
*/
public class xRTViewFromByteToInt16
extends xRTViewFromByte {
- public static xRTViewFromByteToInt16 INSTANCE;
-
- public xRTViewFromByteToInt16(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewFromByteToInt16(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -61,7 +55,7 @@ protected DelegateHandle createCopyImpl(DelegateHandle hTarget, Mutability mutab
anValue[i] = (short) (((short) bValue0) << 8 | (bValue1 & 0xFF));
}
- return xRTInt16Delegate.INSTANCE.packHandle(anValue, mutability);
+ return f_container.nativeTemplate(xRTInt16Delegate.class).packHandle(anValue, mutability);
}
throw new UnsupportedOperationException();
@@ -79,7 +73,7 @@ protected int extractArrayValueImpl(Frame frame, DelegateHandle hTarget, long lI
// using a "short" intermediary takes care of the sign handling
short nValue = (short) (((short) bValue0) << 8 | (bValue1 & 0xFF));
- return frame.assignValue(iReturn, xInt16.INSTANCE.makeJavaLong(nValue));
+ return frame.assignValue(iReturn, f_container.nativeTemplate(xInt16.class).makeJavaLong(nValue));
}
throw new UnsupportedOperationException();
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt64.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt64.java
index 4b4ae73984..a0e0e6cf84 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt64.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt64.java
@@ -25,14 +25,8 @@
*/
public class xRTViewFromByteToInt64
extends xRTViewFromByte {
- public static xRTViewFromByteToInt64 INSTANCE;
-
- public xRTViewFromByteToInt64(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewFromByteToInt64(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -60,7 +54,7 @@ protected DelegateHandle createCopyImpl(DelegateHandle hTarget, Mutability mutab
alValue[i] = Handy.byteArrayToLong(ab, 0);
}
- return xRTInt64Delegate.INSTANCE.makeHandle(alValue, alValue.length, mutability);
+ return f_container.nativeTemplate(xRTInt64Delegate.class).makeHandle(alValue, alValue.length, mutability);
}
throw new UnsupportedOperationException();
@@ -76,7 +70,7 @@ protected int extractArrayValueImpl(Frame frame, DelegateHandle hTarget, long lI
byte[] ab = tView.getBytes(hSource, lIndex*8, 8, false);
long l = Handy.byteArrayToLong(ab, 0);
- return frame.assignValue(iReturn, xInt64.makeHandle(l));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, l));
}
throw new UnsupportedOperationException();
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt8.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt8.java
index 8a14d1d8b4..a753608058 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt8.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewFromByteToInt8.java
@@ -23,14 +23,8 @@
*/
public class xRTViewFromByteToInt8
extends xRTViewFromByte {
- public static xRTViewFromByteToInt8 INSTANCE;
-
- public xRTViewFromByteToInt8(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewFromByteToInt8(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -54,7 +48,7 @@ protected DelegateHandle createCopyImpl(DelegateHandle hTarget, Mutability mutab
if (tSource instanceof ByteView tView) {
byte[] abValue = tView.getBytes(hSource, ofStart, cSize, fReverse);
- return xRTInt8Delegate.INSTANCE.makeHandle(abValue, cSize, mutability);
+ return f_container.nativeTemplate(xRTInt8Delegate.class).makeHandle(abValue, cSize, mutability);
}
throw new UnsupportedOperationException();
@@ -69,7 +63,7 @@ protected int extractArrayValueImpl(Frame frame, DelegateHandle hTarget, long lI
if (tSource instanceof ByteView tView) {
byte bValue = tView.extractByte(hSource, lIndex);
- return frame.assignValue(iReturn, xInt8.INSTANCE.makeJavaLong(bValue));
+ return frame.assignValue(iReturn, f_container.nativeTemplate(xInt8.class).makeJavaLong(bValue));
}
throw new UnsupportedOperationException();
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBit.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBit.java
index dd570610f8..23b9816130 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBit.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBit.java
@@ -20,19 +20,13 @@
*/
public class xRTViewToBit
extends xRTView {
- public static xRTViewToBit INSTANCE;
-
- public xRTViewToBit(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBit(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
public void registerNativeTemplates() {
- if (this == INSTANCE) {
+ if (isNativeInstance(xRTViewToBit.class)) {
registerNativeTemplate(new xRTViewToBitFromNibble(f_container, f_struct, true));
registerNativeTemplate(new xRTViewToBitFromInt8 (f_container, f_struct, true));
@@ -52,26 +46,26 @@ public void registerNativeTemplates() {
}
@Override
public void initNative() {
- if (this == INSTANCE) {
+ if (isNativeInstance(xRTViewToBit.class)) {
// register native views
ConstantPool pool = pool();
Map mapViews = new HashMap<>();
- mapViews.put(pool.typeNibble(), xRTViewToBitFromNibble.INSTANCE);
+ mapViews.put(pool.typeNibble(), f_container.nativeTemplate(xRTViewToBitFromNibble.class));
- mapViews.put(pool.typeInt8() , xRTViewToBitFromInt8 .INSTANCE);
- mapViews.put(pool.typeInt16() , xRTViewToBitFromInt16 .INSTANCE);
- mapViews.put(pool.typeInt32() , xRTViewToBitFromInt32 .INSTANCE);
- mapViews.put(pool.typeInt64() , xRTViewToBitFromInt64 .INSTANCE);
- mapViews.put(pool.typeInt128() , xRTViewToBitFromInt128 .INSTANCE);
+ mapViews.put(pool.typeInt8() , f_container.nativeTemplate(xRTViewToBitFromInt8.class));
+ mapViews.put(pool.typeInt16() , f_container.nativeTemplate(xRTViewToBitFromInt16.class));
+ mapViews.put(pool.typeInt32() , f_container.nativeTemplate(xRTViewToBitFromInt32.class));
+ mapViews.put(pool.typeInt64() , f_container.nativeTemplate(xRTViewToBitFromInt64.class));
+ mapViews.put(pool.typeInt128() , f_container.nativeTemplate(xRTViewToBitFromInt128.class));
- mapViews.put(pool.typeUInt8() , xRTViewToBitFromUInt8 .INSTANCE);
- mapViews.put(pool.typeUInt16() , xRTViewToBitFromUInt16 .INSTANCE);
- mapViews.put(pool.typeUInt32() , xRTViewToBitFromUInt32 .INSTANCE);
- mapViews.put(pool.typeUInt64() , xRTViewToBitFromUInt64 .INSTANCE);
- mapViews.put(pool.typeUInt128(), xRTViewToBitFromUInt128.INSTANCE);
+ mapViews.put(pool.typeUInt8() , f_container.nativeTemplate(xRTViewToBitFromUInt8.class));
+ mapViews.put(pool.typeUInt16() , f_container.nativeTemplate(xRTViewToBitFromUInt16.class));
+ mapViews.put(pool.typeUInt32() , f_container.nativeTemplate(xRTViewToBitFromUInt32.class));
+ mapViews.put(pool.typeUInt64() , f_container.nativeTemplate(xRTViewToBitFromUInt64.class));
+ mapViews.put(pool.typeUInt128(), f_container.nativeTemplate(xRTViewToBitFromUInt128.class));
- mapViews.put(pool.typeFloat64(), xRTViewToBitFromFloat64.INSTANCE);
+ mapViews.put(pool.typeFloat64(), f_container.nativeTemplate(xRTViewToBitFromFloat64.class));
VIEWS = mapViews;
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromFloat64.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromFloat64.java
index aa5317caef..c01ff5b862 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromFloat64.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromFloat64.java
@@ -34,14 +34,8 @@
public class xRTViewToBitFromFloat64
extends xRTViewToBit
implements BitView {
- public static xRTViewToBitFromFloat64 INSTANCE;
-
- public xRTViewToBitFromFloat64(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromFloat64(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -82,7 +76,7 @@ protected DelegateHandle createCopyImpl(DelegateHandle hTarget, Mutability mutab
byte[] abBits = getBits(hView, ofStart, cSize, fReverse);
- return xRTBitDelegate.INSTANCE.makeHandle(abBits, cSize, mutability);
+ return f_container.nativeTemplate(xRTBitDelegate.class).makeHandle(abBits, cSize, mutability);
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt128.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt128.java
index ccf3f18e6b..ad9717a169 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt128.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt128.java
@@ -14,14 +14,8 @@
*/
public class xRTViewToBitFromInt128
extends LongBasedBitView {
- public static xRTViewToBitFromInt128 INSTANCE;
-
- public xRTViewToBitFromInt128(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromInt128(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 128);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt16.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt16.java
index 9449af5454..973a582832 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt16.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt16.java
@@ -14,14 +14,8 @@
*/
public class xRTViewToBitFromInt16
extends LongBasedBitView {
- public static xRTViewToBitFromInt16 INSTANCE;
-
- public xRTViewToBitFromInt16(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromInt16(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 16);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt32.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt32.java
index 1e9e3e8ee1..2c6cfab2a3 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt32.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt32.java
@@ -14,14 +14,8 @@
*/
public class xRTViewToBitFromInt32
extends LongBasedBitView {
- public static xRTViewToBitFromInt32 INSTANCE;
-
- public xRTViewToBitFromInt32(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromInt32(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 32);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt64.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt64.java
index 88877d7731..2a03906daf 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt64.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt64.java
@@ -14,14 +14,8 @@
*/
public class xRTViewToBitFromInt64
extends LongBasedBitView {
- public static xRTViewToBitFromInt64 INSTANCE;
-
- public xRTViewToBitFromInt64(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromInt64(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 64);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt8.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt8.java
index 0f23141079..e05637fd80 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt8.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromInt8.java
@@ -14,14 +14,8 @@
*/
public class xRTViewToBitFromInt8
extends ByteBasedBitView {
- public static xRTViewToBitFromInt8 INSTANCE;
-
- public xRTViewToBitFromInt8(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromInt8(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromNibble.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromNibble.java
index 69c3aa6f52..2c6f1a1d62 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromNibble.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromNibble.java
@@ -14,14 +14,8 @@
*/
public class xRTViewToBitFromNibble
extends LongBasedBitView {
- public static xRTViewToBitFromNibble INSTANCE;
-
- public xRTViewToBitFromNibble(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromNibble(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 4);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt128.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt128.java
index ec3c5cab72..198bab445f 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt128.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt128.java
@@ -14,14 +14,8 @@
*/
public class xRTViewToBitFromUInt128
extends LongBasedBitView {
- public static xRTViewToBitFromUInt128 INSTANCE;
-
- public xRTViewToBitFromUInt128(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromUInt128(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 128);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt16.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt16.java
index b0d648526a..8045ff8f04 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt16.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt16.java
@@ -14,14 +14,8 @@
*/
public class xRTViewToBitFromUInt16
extends LongBasedBitView {
- public static xRTViewToBitFromUInt16 INSTANCE;
-
- public xRTViewToBitFromUInt16(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromUInt16(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 16);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt32.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt32.java
index f940f85337..78c2206ae4 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt32.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt32.java
@@ -14,14 +14,8 @@
*/
public class xRTViewToBitFromUInt32
extends LongBasedBitView {
- public static xRTViewToBitFromUInt32 INSTANCE;
-
- public xRTViewToBitFromUInt32(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromUInt32(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 32);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt64.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt64.java
index 38b770bc16..3f85513df9 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt64.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt64.java
@@ -14,14 +14,8 @@
*/
public class xRTViewToBitFromUInt64
extends LongBasedBitView {
- public static xRTViewToBitFromUInt64 INSTANCE;
-
- public xRTViewToBitFromUInt64(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromUInt64(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, 64);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt8.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt8.java
index 2b0213ea15..79f5696ef6 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt8.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/arrays/xRTViewToBitFromUInt8.java
@@ -14,14 +14,8 @@
*/
public class xRTViewToBitFromUInt8
extends ByteBasedBitView {
- public static xRTViewToBitFromUInt8 INSTANCE;
-
- public xRTViewToBitFromUInt8(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTViewToBitFromUInt8(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/xBasicHashCollector.java b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/xBasicHashCollector.java
index eaed5ecc7d..b7894103d1 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/collections/xBasicHashCollector.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/collections/xBasicHashCollector.java
@@ -23,16 +23,10 @@
public class xBasicHashCollector
extends ClassTemplate {
- public static xBasicHashCollector INSTANCE;
-
private static final String[] TYPE_HASH_COLLECTOR = { "collections.HashCollector" };
- public xBasicHashCollector(Container container, ClassStructure structure, boolean fInstance) {
+ public xBasicHashCollector(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -60,7 +54,7 @@ public int invokeNativeN(Frame frame, MethodStructure method, ObjectHandle hTarg
return frame.assignValue(iReturn, hTarget);
}
case "compute": {
- JavaLong hHash = xInt64.makeHandle(hCollector.collector.compute());
+ JavaLong hHash = xInt64.makeHandle(frame, hCollector.collector.compute());
return frame.assignValue(iReturn, hHash);
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTAlgorithms.java b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTAlgorithms.java
index c0c0d13dbc..575cc993b3 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTAlgorithms.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTAlgorithms.java
@@ -54,14 +54,8 @@
*/
public class xRTAlgorithms
extends xService {
- public static xRTAlgorithms INSTANCE;
-
- public xRTAlgorithms(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTAlgorithms(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -143,7 +137,7 @@ private int invokeGetAlgorithmInfo(Frame frame, StringHandle hName, EnumHandle h
MessageDigest digest = MessageDigest.getInstance(sName);
nBlockSize = 0;
- hImpl = new DigestHandle(digest);
+ hImpl = new DigestHandle(frame.container(), digest);
break;
}
@@ -152,7 +146,7 @@ private int invokeGetAlgorithmInfo(Frame frame, StringHandle hName, EnumHandle h
Cipher cipher = Cipher.getInstance(sName);
nBlockSize = cipher.getBlockSize();
- hImpl = new CipherHandle(cipher);
+ hImpl = new CipherHandle(frame.container(), cipher);
break;
}
@@ -160,7 +154,7 @@ private int invokeGetAlgorithmInfo(Frame frame, StringHandle hName, EnumHandle h
Mac mac = Mac.getInstance(sName);
nBlockSize = 0;
- hImpl = new MacHandle(mac);
+ hImpl = new MacHandle(frame.container(), mac);
break;
}
@@ -168,7 +162,7 @@ private int invokeGetAlgorithmInfo(Frame frame, StringHandle hName, EnumHandle h
Signature sig = Signature.getInstance(sName);
nBlockSize = 0;
- hImpl = new SignatureHandle(sig);
+ hImpl = new SignatureHandle(frame.container(), sig);
break;
}
@@ -176,7 +170,7 @@ private int invokeGetAlgorithmInfo(Frame frame, StringHandle hName, EnumHandle h
KeyGenerator generator = KeyGenerator.getInstance(sName);
nBlockSize = 0;
- hImpl = new KeyGenHandle(generator);
+ hImpl = new KeyGenHandle(frame.container(), generator);
break;
}
@@ -185,7 +179,7 @@ private int invokeGetAlgorithmInfo(Frame frame, StringHandle hName, EnumHandle h
}
List list = new ArrayList<>(9);
- list.add(xInt64.makeHandle(nBlockSize));
+ list.add(xInt64.makeHandle(frame, nBlockSize));
list.add(hImpl);
return frame.assignValues(aiReturn, list.toArray(Utils.OBJECTS_NONE));
@@ -288,8 +282,8 @@ public enum KeyForm {Public, Private, PublicOrSecret, PrivateOrSecret}
*/
public static class DigestHandle
extends ObjectHandle {
- protected DigestHandle(MessageDigest digest) {
- super(xObject.INSTANCE.getCanonicalClass());
+ protected DigestHandle(Container container, MessageDigest digest) {
+ super(container.nativeTemplate(xObject.class).getCanonicalClass());
f_digest = digest;
}
@@ -305,8 +299,8 @@ protected DigestHandle(MessageDigest digest) {
*/
public static class CipherHandle
extends ObjectHandle {
- protected CipherHandle(Cipher cipher) {
- super(xObject.INSTANCE.getCanonicalClass());
+ protected CipherHandle(Container container, Cipher cipher) {
+ super(container.nativeTemplate(xObject.class).getCanonicalClass());
f_cipher = cipher;
}
@@ -322,8 +316,8 @@ protected CipherHandle(Cipher cipher) {
*/
public static class SignatureHandle
extends ObjectHandle {
- protected SignatureHandle(Signature signature) {
- super(xObject.INSTANCE.getCanonicalClass());
+ protected SignatureHandle(Container container, Signature signature) {
+ super(container.nativeTemplate(xObject.class).getCanonicalClass());
f_signature = signature;
}
@@ -339,8 +333,8 @@ protected SignatureHandle(Signature signature) {
*/
public static class MacHandle
extends ObjectHandle {
- protected MacHandle(Mac mac) {
- super(xObject.INSTANCE.getCanonicalClass());
+ protected MacHandle(Container container, Mac mac) {
+ super(container.nativeTemplate(xObject.class).getCanonicalClass());
f_mac = mac;
}
@@ -356,8 +350,8 @@ protected MacHandle(Mac mac) {
*/
public static class SecretHandle
extends ObjectHandle {
- protected SecretHandle(Key key) {
- super(xObject.INSTANCE.getCanonicalClass());
+ protected SecretHandle(Container container, Key key) {
+ super(container.nativeTemplate(xObject.class).getCanonicalClass());
f_key = key;
}
@@ -378,8 +372,8 @@ public static class KeyGenHandle
*/
public final KeyGenerator f_generator;
- protected KeyGenHandle(KeyGenerator generator) {
- super(xObject.INSTANCE.getCanonicalClass());
+ protected KeyGenHandle(Container container, KeyGenerator generator) {
+ super(container.nativeTemplate(xObject.class).getCanonicalClass());
f_generator = generator;
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTCertificateManager.java b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTCertificateManager.java
index 3414355cde..1570e7e479 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTCertificateManager.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTCertificateManager.java
@@ -74,14 +74,8 @@
public class xRTCertificateManager
extends xService {
- public static xRTCertificateManager INSTANCE;
-
- public xRTCertificateManager(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTCertificateManager(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -113,7 +107,7 @@ public TypeConstant getCanonicalType() {
* Injection support method.
*/
public ObjectHandle ensureManager(Frame frame, ObjectHandle hOpts) {
- StringHandle hProvider = hOpts instanceof StringHandle hS ? hS : xString.makeHandle("self");
+ StringHandle hProvider = hOpts instanceof StringHandle hS ? hS : xString.makeHandle(frame, "self");
ClassComposition clz = getCanonicalClass();
ServiceHandle hMgr = createServiceHandle(
f_container.createServiceContext("CertificateManager"), clz, getCanonicalType());
@@ -533,7 +527,7 @@ private Key loadKey(ObjectHandle hPathOrStore, StringHandle hPwd, StringHandle h
private int invokeKeystoreFor(Frame frame, ObjectHandle[] ahArg, int iReturn) {
ArrayHandle hContent = (ArrayHandle) ahArg[0];
StringHandle hPwd = xRTKeyStore.getPassword(frame, ahArg[1]);
- ObjectHandle hKeyStore = xRTKeyStore.INSTANCE.ensureKeyStore(frame, hContent, hPwd);
+ ObjectHandle hKeyStore = f_container.nativeTemplate(xRTKeyStore.class).ensureKeyStore(frame, hContent, hPwd);
return frame.assignDeferredValue(iReturn, hKeyStore);
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTDecryptor.java b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTDecryptor.java
index dba7ce8269..ce451910e8 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTDecryptor.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTDecryptor.java
@@ -32,14 +32,8 @@
*/
public class xRTDecryptor
extends xService {
- public static xRTDecryptor INSTANCE;
-
- public xRTDecryptor(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTDecryptor(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTHasher.java b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTHasher.java
index 4fc8582436..975b0f4e66 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTHasher.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTHasher.java
@@ -27,14 +27,8 @@
*/
public class xRTHasher
extends xService {
- public static xRTHasher INSTANCE;
-
- public xRTHasher(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTHasher(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTKeyGenerator.java b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTKeyGenerator.java
index 48222bcd08..30a2093be7 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTKeyGenerator.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTKeyGenerator.java
@@ -23,14 +23,8 @@
*/
public class xRTKeyGenerator
extends xService {
- public static xRTKeyGenerator INSTANCE;
-
- public xRTKeyGenerator(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTKeyGenerator(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -59,6 +53,7 @@ private int invokeGenerateSecret(Frame frame, KeyGenHandle hKeyGen, int[] aiRetu
SecretKey key = hKeyGen.f_generator.generateKey();
int nSize = key.getEncoded().length;
- return frame.assignValues(aiReturn, xInt64.makeHandle(nSize), new SecretHandle(key));
+ return frame.assignValues(aiReturn, xInt64.makeHandle(frame, nSize),
+ new SecretHandle(frame.container(), key));
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTKeyStore.java b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTKeyStore.java
index 8ab3f99ad6..eee284066a 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTKeyStore.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTKeyStore.java
@@ -82,14 +82,8 @@
*/
public class xRTKeyStore
extends xService {
- public static xRTKeyStore INSTANCE;
-
- public xRTKeyStore(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTKeyStore(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -214,7 +208,7 @@ public int invokeNativeGet(Frame frame, String sPropName, ObjectHandle hTarget,
try {
ArrayList listNames = Collections.list(hStore.f_keyStore.aliases());
return frame.assignValue(iReturn,
- xString.makeArrayHandle(listNames.toArray(Utils.NO_NAMES)));
+ xString.makeArrayHandle(frame.container(), listNames.toArray(Utils.NO_NAMES)));
} catch (KeyStoreException e) {
return frame.raiseException(xException.makeObscure(frame, e.getMessage()));
}
@@ -337,18 +331,18 @@ private int invokeGetCertificateInfo(Frame frame, KeyStoreHandle hStore, StringH
// create the arguments
List list = new ArrayList<>(9);
list.add(xBoolean.TRUE);
- list.add(xString.makeHandle(sIssuer));
- list.add(xString.makeHandle(sSubject));
- list.add(xInt64.makeHandle(nVersion));
- addDate(dateNotBefore, list);
- addDate(dateNotAfter, list);
+ list.add(xString.makeHandle(frame, sIssuer));
+ list.add(xString.makeHandle(frame, sSubject));
+ list.add(xInt64.makeHandle(frame, nVersion));
+ addDate(frame, dateNotBefore, list);
+ addDate(frame, dateNotAfter, list);
list.add(xArray.makeBooleanArrayHandle(abUsage, cUsage, Mutability.Constant));
- list.add(xString.makeHandle(sSigAlgName));
+ list.add(xString.makeHandle(frame, sSigAlgName));
list.add(xByteArray.makeByteArrayHandle(abSignature, Mutability.Constant));
- list.add(xString.makeHandle(sAlgorithm));
- list.add(xInt64.makeHandle(cKeyBits >>> 3));
+ list.add(xString.makeHandle(frame, sAlgorithm));
+ list.add(xInt64.makeHandle(frame, cKeyBits >>> 3));
list.add(xByteArray.makeByteArrayHandle(abPublic, Mutability.Constant));
- list.add(new SecretHandle(publicKey));
+ list.add(new SecretHandle(frame.container(), publicKey));
list.add(xByteArray.makeByteArrayHandle(abDer, Mutability.Constant));
return frame.assignValues(aiReturn, list.toArray(Utils.OBJECTS_NONE));
@@ -357,13 +351,13 @@ private int invokeGetCertificateInfo(Frame frame, KeyStoreHandle hStore, StringH
}
}
- private static void addDate(Date date, List list) {
+ private static void addDate(Frame frame, Date date, List list) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
- list.add(xInt64.makeHandle(cal.get(Calendar.YEAR)));
- list.add(xInt64.makeHandle(cal.get(Calendar.MONTH) + 1));
- list.add(xInt64.makeHandle(cal.get(Calendar.DAY_OF_MONTH)));
+ list.add(xInt64.makeHandle(frame, cal.get(Calendar.YEAR)));
+ list.add(xInt64.makeHandle(frame, cal.get(Calendar.MONTH) + 1));
+ list.add(xInt64.makeHandle(frame, cal.get(Calendar.DAY_OF_MONTH)));
}
private static int getPublicKeyLength(PublicKey puk)
@@ -409,10 +403,10 @@ private int invokeEntryType(Frame frame, KeyStoreHandle hStore, StringHandle hNa
} else {
nType = 1; // Pair
}
- return frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(nType));
+ return frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(frame, nType));
}
if (keyStore.isCertificateEntry(sName)) {
- return frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(1)); // Certificate
+ return frame.assignValues(aiReturn, xBoolean.TRUE, xInt64.makeHandle(frame, 1)); // Certificate
}
return frame.assignValue(aiReturn[0], xBoolean.FALSE);
} catch (GeneralSecurityException e) {
@@ -456,14 +450,14 @@ private int invokeGetKeyInfo(Frame frame, KeyStoreHandle hStore, StringHandle hN
List list = new ArrayList<>(9);
list.add(xBoolean.TRUE);
- list.add(xString.makeHandle(sAlgorithm));
- list.add(xInt64.makeHandle(cKeyBits >>> 3));
- list.add(new SecretHandle(key));
+ list.add(xString.makeHandle(frame, sAlgorithm));
+ list.add(xInt64.makeHandle(frame, cKeyBits >>> 3));
+ list.add(new SecretHandle(frame.container(), key));
if (publicKey == null) {
list.add(xNullable.NULL);
list.add(xArray.ensureEmptyByteArray());
} else {
- list.add(new SecretHandle(publicKey));
+ list.add(new SecretHandle(frame.container(), publicKey));
list.add(xArray.makeByteArrayHandle(abPublic, Mutability.Constant));
}
return frame.assignValues(aiReturn, list.toArray(Utils.OBJECTS_NONE));
@@ -485,13 +479,13 @@ private int invokeGetPasswordInfo(Frame frame, KeyStoreHandle hStore, StringHand
Key key = hStore.getKey(sName);
if (key instanceof PBEKey keyPwd) {
return frame.assignValues(aiReturn,
- xBoolean.TRUE, xString.makeHandle(keyPwd.getPassword()));
+ xBoolean.TRUE, xString.makeHandle(frame, keyPwd.getPassword()));
}
// unfortunately com.sun.crypto.provider.PBEKey is not public
if ("PBEKey".equals(key.getClass().getSimpleName())) {
return frame.assignValues(aiReturn, xBoolean.TRUE,
- xString.makeHandle(new String(key.getEncoded(), StandardCharsets.UTF_8)));
+ xString.makeHandle(frame, new String(key.getEncoded(), StandardCharsets.UTF_8)));
}
return frame.assignValue(aiReturn[0], xBoolean.FALSE);
} catch (GeneralSecurityException e) {
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTSigner.java b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTSigner.java
index af585413cf..1eb94ede0b 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTSigner.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/crypto/xRTSigner.java
@@ -38,14 +38,8 @@
*/
public class xRTSigner
extends xService {
- public static xRTSigner INSTANCE;
-
- public xRTSigner(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTSigner(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPDirectory.java b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPDirectory.java
index 59a2713132..2ccadada7b 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPDirectory.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPDirectory.java
@@ -26,7 +26,7 @@
*/
public class xCPDirectory
extends xConst {
- public xCPDirectory(Container container, ClassStructure structure, boolean fInstance) {
+ public xCPDirectory(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPFile.java b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPFile.java
index 734fc16ef6..2b4fe7f38d 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPFile.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPFile.java
@@ -26,7 +26,7 @@
*/
public class xCPFile
extends xConst {
- public xCPFile(Container container, ClassStructure structure, boolean fInstance) {
+ public xCPFile(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPFileStore.java b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPFileStore.java
index d8a2255c63..0b68ffdbd7 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPFileStore.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xCPFileStore.java
@@ -37,7 +37,7 @@
*/
public class xCPFileStore
extends xConst {
- public xCPFileStore(Container container, ClassStructure structure, boolean fInstance) {
+ public xCPFileStore(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
}
@@ -62,7 +62,7 @@ public int createConstHandle(Frame frame, Constant constant) {
GenericHandle hStruct = new GenericHandle(clz.ensureAccess(Access.STRUCT));
ObjectHandle[] ahVar = Utils.ensureSize(Utils.OBJECTS_NONE, s_constructor.getMaxVars());
- ahVar[0] = xString.makeHandle(constStore.getPath());
+ ahVar[0] = xString.makeHandle(frame, constStore.getPath());
ahVar[1] = new ConstantHandle(constStore.getValue());
return proceedConstruction(frame, s_constructor, true, hStruct, ahVar, Op.A_STACK);
@@ -99,10 +99,10 @@ public int invokeNativeNN(Frame frame, MethodStructure method, ObjectHandle hTar
ObjectHandle[] ahValue = new ObjectHandle[5];
ahValue[0] = xBoolean.makeHandle(constNode.getFormat() == Format.FSDir);
- ahValue[1] = xString.makeHandle(constNode.getName());
+ ahValue[1] = xString.makeHandle(frame, constNode.getName());
ahValue[2] = frame.getConstHandle(constNode.getCreatedConstant());
ahValue[3] = frame.getConstHandle(constNode.getModifiedConstant());
- ahValue[4] = xInt64.makeHandle(calcSize(constNode));
+ ahValue[4] = xInt64.makeHandle(frame, calcSize(constNode));
return new Utils.AssignValues(aiReturn, ahValue).proceed(frame);
}
@@ -117,7 +117,7 @@ public int invokeNativeNN(Frame frame, MethodStructure method, ObjectHandle hTar
ObjectHandle[] ahCookies = new ObjectHandle[cNodes];
for (int i = 0; i < cNodes; ++i) {
FSNodeConstant constEach = aNodes[i];
- ahNames [i] = xString.makeHandle(constEach.getName());
+ ahNames [i] = xString.makeHandle(frame, constEach.getName());
ahCookies[i] = new ConstantHandle(constEach);
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSDirectory.java b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSDirectory.java
index 3eb30f0d97..e737fd27f3 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSDirectory.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSDirectory.java
@@ -30,14 +30,8 @@
*/
public class xOSDirectory
extends xOSFileNode {
- public static xOSDirectory INSTANCE;
-
- public xOSDirectory(Container container, ClassStructure structure, boolean fInstance) {
+ public xOSDirectory(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFile.java b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFile.java
index 3630a0866f..9e5b4cdcad 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFile.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFile.java
@@ -53,14 +53,8 @@
*/
public class xOSFile
extends xOSFileNode {
- public static xOSFile INSTANCE;
-
- public xOSFile(Container container, ClassStructure structure, boolean fInstance) {
+ public xOSFile(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -487,7 +481,7 @@ private int invokeOpen(Frame frame, NodeHandle hFile, ObjectHandle[] ahArg, int
Path path = hFile.f_path;
try {
FileChannel channel = FileChannel.open(path, aOpenOpt);
- return xRawOSFileChannel.INSTANCE.createHandle(frame, channel, path, iReturn);
+ return f_container.nativeTemplate(xRawOSFileChannel.class).createHandle(frame, channel, path, iReturn);
} catch (IOException e) {
return raisePathException(frame, e, path);
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFileNode.java b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFileNode.java
index ad274e2fa9..5f1b497767 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFileNode.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFileNode.java
@@ -33,7 +33,7 @@
*/
public class xOSFileNode
extends xConst {
- public xOSFileNode(Container container, ClassStructure structure, boolean fInstance) {
+ public xOSFileNode(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
}
@@ -56,7 +56,7 @@ public int invokeNativeGet(Frame frame, String sPropName, ObjectHandle hTarget,
NodeHandle hNode = (NodeHandle) hTarget;
switch (sPropName) {
case "pathString":
- return frame.assignValue(iReturn, xString.makeHandle(hNode.f_path.toString()));
+ return frame.assignValue(iReturn, xString.makeHandle(frame, hNode.f_path.toString()));
case "exists":
return frame.assignValue(iReturn, xBoolean.makeHandle(hNode.f_path.toFile().exists()));
@@ -70,7 +70,7 @@ public int invokeNativeGet(Frame frame, String sPropName, ObjectHandle hTarget,
case "createdMillis":
try {
BasicFileAttributes attr = Files.readAttributes(hNode.f_path, BasicFileAttributes.class);
- return frame.assignValue(iReturn, xInt64.makeHandle(attr.creationTime().toMillis()));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, attr.creationTime().toMillis()));
} catch (IOException e) {
return raisePathException(frame, e, hNode.f_path);
}
@@ -78,7 +78,7 @@ public int invokeNativeGet(Frame frame, String sPropName, ObjectHandle hTarget,
case "accessedMillis":
try {
BasicFileAttributes attr = Files.readAttributes(hNode.f_path, BasicFileAttributes.class);
- return frame.assignValue(iReturn, xInt64.makeHandle(attr.lastAccessTime().toMillis()));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, attr.lastAccessTime().toMillis()));
} catch (IOException e) {
return raisePathException(frame, e, hNode.f_path);
}
@@ -86,7 +86,7 @@ public int invokeNativeGet(Frame frame, String sPropName, ObjectHandle hTarget,
case "modifiedMillis":
try {
BasicFileAttributes attr = Files.readAttributes(hNode.f_path, BasicFileAttributes.class);
- return frame.assignValue(iReturn, xInt64.makeHandle(attr.lastModifiedTime().toMillis()));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, attr.lastModifiedTime().toMillis()));
} catch (IOException e) {
return raisePathException(frame, e, hNode.f_path);
}
@@ -96,9 +96,9 @@ public int invokeNativeGet(Frame frame, String sPropName, ObjectHandle hTarget,
Path path = hNode.f_path;
if (Files.exists(path)) {
BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class);
- return frame.assignValue(iReturn, xInt64.makeHandle(attr.size()));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, attr.size()));
} else {
- return frame.assignValue(iReturn, xInt64.makeHandle(0));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, 0));
}
} catch (IOException e) {
return raisePathException(frame, e, hNode.f_path);
@@ -121,8 +121,10 @@ public int invokeNativeGet(Frame frame, String sPropName, ObjectHandle hTarget,
*/
static int createHandle(Frame frame, ObjectHandle hOSStore, Path path, boolean fDir, int iReturn) {
return fDir
- ? xOSDirectory.INSTANCE.createHandle(frame, hOSStore, path, iReturn)
- : xOSFile .INSTANCE.createHandle(frame, hOSStore, path, iReturn);
+ ? frame.nativeTemplate(xOSDirectory.class).
+ createHandle(frame, hOSStore, path, iReturn)
+ : frame.nativeTemplate(xOSFile.class).
+ createHandle(frame, hOSStore, path, iReturn);
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFileStore.java b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFileStore.java
index d2e1046164..a0900dd572 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFileStore.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSFileStore.java
@@ -35,7 +35,7 @@
*/
public class xOSFileStore
extends ClassTemplate {
- public xOSFileStore(Container container, ClassStructure structure, boolean fInstance) {
+ public xOSFileStore(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
}
@@ -69,13 +69,13 @@ protected int postValidate(Frame frame, ObjectHandle hStruct) {
public int invokeNativeGet(Frame frame, String sPropName, ObjectHandle hTarget, int iReturn) {
switch (sPropName) {
case "capacity":
- return frame.assignValue(iReturn, xInt64.makeHandle(ROOT.getTotalSpace()));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, ROOT.getTotalSpace()));
case "bytesFree":
- return frame.assignValue(iReturn, xInt64.makeHandle(ROOT.getFreeSpace()));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, ROOT.getFreeSpace()));
case "bytesUsed":
- return frame.assignValue(iReturn, xInt64.makeHandle(ROOT.getTotalSpace() - ROOT.getFreeSpace()));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, ROOT.getTotalSpace() - ROOT.getFreeSpace()));
}
return super.invokeNativeGet(frame, sPropName, hTarget, iReturn);
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSStorage.java b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSStorage.java
index c5b1e70878..658029ef6d 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSStorage.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xOSStorage.java
@@ -46,7 +46,7 @@
*/
public class xOSStorage
extends xService {
- public xOSStorage(Container container, ClassStructure structure, boolean fInstance) {
+ public xOSStorage(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
}
@@ -89,15 +89,15 @@ public int invokeNativeGet(Frame frame, String sPropName, ObjectHandle hTarget,
// the handles below are cached by the Container.initResources()
switch (sPropName) {
case "homeDir":
- return xOSDirectory.INSTANCE.createHandle(frame, hStore,
+ return f_container.nativeTemplate(xOSDirectory.class).createHandle(frame, hStore,
Paths.get(System.getProperty("user.home")), iReturn);
case "curDir":
- return xOSDirectory.INSTANCE.createHandle(frame, hStore,
+ return f_container.nativeTemplate(xOSDirectory.class).createHandle(frame, hStore,
Paths.get(System.getProperty("user.dir")), iReturn);
case "tmpDir":
- return xOSDirectory.INSTANCE.createHandle(frame, hStore,
+ return f_container.nativeTemplate(xOSDirectory.class).createHandle(frame, hStore,
Paths.get(System.getProperty("java.io.tmpdir")), iReturn);
}
return super.invokeNativeGet(frame, sPropName, hTarget, iReturn);
@@ -109,7 +109,7 @@ public int invokeNative1(Frame frame, MethodStructure method, ObjectHandle hTarg
ServiceHandle hStorage = (ServiceHandle) hTarget;
if (frame.f_context != hStorage.f_context) {
- return xRTFunction.makeAsyncNativeHandle(method).
+ return xRTFunction.makeAsyncNativeHandle(frame.container(), method).
call1(frame, hTarget, new ObjectHandle[] {hArg}, iReturn);
}
@@ -124,7 +124,7 @@ public int invokeNative1(Frame frame, MethodStructure method, ObjectHandle hTarg
return cNames == 0
? frame.assignValue(iReturn, xString.ensureEmptyArray())
- : frame.assignValue(iReturn, xString.makeArrayHandle(asName));
+ : frame.assignValue(iReturn, xString.makeArrayHandle(frame.container(), asName));
} catch (InvalidPathException e) {
return frame.raiseException(xException.ioException(frame, e.getMessage()));
}
@@ -205,7 +205,8 @@ public int invokeNativeN(Frame frame, MethodStructure method, ObjectHandle hTarg
if (hStorage != null && frame.f_context != hStorage.f_context) {
// for now let's make sure all the calls are processed on the service fibers
- return xRTFunction.makeAsyncNativeHandle(method).call1(frame, hTarget, ahArg, iReturn);
+ return xRTFunction.makeAsyncNativeHandle(frame.container(), method).
+ call1(frame, hTarget, ahArg, iReturn);
}
switch (method.getName()) {
@@ -223,7 +224,8 @@ public int invokeNativeNN(Frame frame, MethodStructure method, ObjectHandle hTar
if (frame.f_context != hStorage.f_context) {
// for now let's make sure all the calls are processed on the service fibers
- return xRTFunction.makeAsyncNativeHandle(method).callN(frame, hTarget, ahArg, aiReturn);
+ return xRTFunction.makeAsyncNativeHandle(frame.container(), method).
+ callN(frame, hTarget, ahArg, aiReturn);
}
switch (method.getName()) {
@@ -318,14 +320,17 @@ protected void processKey(WatchKey key) {
Path pathRelative = (Path) event.context();
Path pathAbsolute = pathDir.resolve(pathRelative);
- FunctionHandle hfnOnEvent =
- xRTFunction.makeInternalHandle(null, s_methodOnEvent).bindTarget(null, context.hStorage);
+ Container container = context.hStorage.f_context.f_container;
+ FunctionHandle hfnOnEvent = xRTFunction.
+ makeInternalHandle(container, s_methodOnEvent).
+ bindTarget(null, context.hStorage);
- StringHandle hPathDir = xString.makeHandle(pathDir.toString());
- StringHandle hPathNode = xString.makeHandle(pathAbsolute.toString());
+ StringHandle hPathDir = xString.makeHandle(container, pathDir.toString());
+ StringHandle hPathNode = xString.makeHandle(container, pathAbsolute.toString());
ObjectHandle[] ahArg = new ObjectHandle[] {
- hPathDir, hPathNode, xBoolean.TRUE, xInt64.makeHandle(iKind)
+ hPathDir, hPathNode, xBoolean.TRUE,
+ xInt64.makeHandle(container, iKind)
};
context.hStorage.f_context.callLater(hfnOnEvent, ahArg);
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xRawOSFileChannel.java b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xRawOSFileChannel.java
index 7940ff94e2..a1c6a6f2aa 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xRawOSFileChannel.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/fs/xRawOSFileChannel.java
@@ -47,14 +47,8 @@
*/
public class xRawOSFileChannel
extends xRawChannel {
- public static xRawOSFileChannel INSTANCE;
-
- public xRawOSFileChannel(Container container, ClassStructure structure, boolean fInstance) {
+ public xRawOSFileChannel(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -84,14 +78,14 @@ public int invokeNativeGet(Frame frame, String sPropName, ObjectHandle hTarget,
switch (sPropName) {
case "size":
try {
- return frame.assignValue(iReturn, xInt64.makeHandle(hChannel.f_channel.size()));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, hChannel.f_channel.size()));
} catch (IOException e) {
return xOSFileNode.raisePathException(frame, e, hChannel.f_path);
}
case "position":
try {
- return frame.assignValue(iReturn, xInt64.makeHandle(hChannel.f_channel.position()));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, hChannel.f_channel.position()));
} catch (IOException e) {
return xOSFileNode.raisePathException(frame, e, hChannel.f_path);
}
@@ -198,7 +192,7 @@ protected int invokeTake(Frame frame, ChannelHandle hChannel, int iReturn) {
try {
int cbRead = cfRead.get().intValue();
return frameCaller.assignValue(iReturn, cbRead < 0
- ? xInt64.makeHandle(-1)
+ ? xInt64.makeHandle(frame, -1)
: xArray.makeByteArrayHandle(buffer.array(), cbRead, Mutability.Constant));
} catch (InterruptedException | ExecutionException e) {
return xOSFileNode.raisePathException(frameCaller, e, hChannel.f_path);
@@ -213,7 +207,7 @@ protected int invokeTake(Frame frame, ChannelHandle hChannel, int iReturn) {
*/
protected int invokeSubmit(Frame frame, ChannelHandle hChannel, ObjectHandle[] ahArg, int iReturn) {
if (!hChannel.f_channel.isOpen()) {
- return frame.assignValue(iReturn, xInt64.makeHandle(-1)); // closed
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, -1)); // closed
}
ArrayHandle hArray = (ArrayHandle) ahArg[0];
@@ -232,7 +226,7 @@ protected int invokeSubmit(Frame frame, ChannelHandle hChannel, ObjectHandle[] a
frame.f_context.f_container.scheduleIO(task); // don't wait
- return frame.assignValue(iReturn, xInt64.makeHandle(0)); // OK
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, 0)); // OK
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/io/xRTBuffer.java b/javatools/src/main/java/org/xvm/runtime/template/_native/io/xRTBuffer.java
index ba948f8e77..453bc334df 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/io/xRTBuffer.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/io/xRTBuffer.java
@@ -23,14 +23,8 @@
*/
public class xRTBuffer
extends ClassTemplate {
- public static xRTBuffer INSTANCE;
-
- public xRTBuffer(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTBuffer(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/io/xTerminalConsole.java b/javatools/src/main/java/org/xvm/runtime/template/_native/io/xTerminalConsole.java
index dff0274a4e..bdfce01b6c 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/io/xTerminalConsole.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/io/xTerminalConsole.java
@@ -46,14 +46,8 @@
*/
public class xTerminalConsole
extends xService {
- public static xTerminalConsole INSTANCE;
-
- public xTerminalConsole(Container container, ClassStructure structure, boolean fInstance) {
+ public xTerminalConsole(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -139,19 +133,19 @@ protected int invokeReadLine(Frame frame, ObjectHandle[] ahArg, int iReturn) {
String sLine = CONSOLE_IN.readLine();
hLine = sLine == null
? xString.EMPTY_STRING
- : xString.makeHandle(sLine);
+ : xString.makeHandle(frame, sLine);
} else {
char[] achLine = CONSOLE.readPassword();
hLine = achLine == null
? xString.EMPTY_STRING
- : xString.makeHandle(achLine);
+ : xString.makeHandle(frame, achLine);
}
} catch (IOException e) {
return frame.raiseException(xException.obscureIoException(frame, e.getMessage()));
}
} else {
try {
- hLine = xString.makeHandle(READER.readLine(sPrompt, fEcho ? null : '\0'));
+ hLine = xString.makeHandle(frame, READER.readLine(sPrompt, fEcho ? null : '\0'));
} catch (UserInterruptException e) {
System.exit(0);
return 0; // not reachable
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/lang/src/xRTCompiler.java b/javatools/src/main/java/org/xvm/runtime/template/_native/lang/src/xRTCompiler.java
index 3566e0bc0b..1b2104adcc 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/lang/src/xRTCompiler.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/lang/src/xRTCompiler.java
@@ -64,14 +64,8 @@
*/
public class xRTCompiler
extends xService {
- public static xRTCompiler INSTANCE;
-
- public xRTCompiler(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTCompiler(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -164,7 +158,7 @@ private int doCompile(Frame frame, CompilerAdapter compiler,
return completeWithError(frame, compiler, sMissing, aiReturn);
}
CallChain chain = computeGetModuleChain(frame, hRepo);
- switch (chain.invoke(frame, hRepo, xString.makeHandle(sMissing), STACK_2)) {
+ switch (chain.invoke(frame, hRepo, xString.makeHandle(frame, sMissing), STACK_2)) {
case Op.R_NEXT:
return popModuleStructure(frame, compiler)
? doCompile(frame, compiler, hRepo, sMissing, aiReturn)
@@ -265,7 +259,7 @@ private int completeCompilation(Frame frame, CompilerAdapter compiler,
haErrors = xString.ensureEmptyArray();
} else {
haTemplates = xArray.makeArrayHandle(clzArray, 0, Utils.OBJECTS_NONE, Mutability.Constant);
- haErrors = xString.makeArrayHandle(listErrors.toArray(Utils.NO_NAMES));
+ haErrors = xString.makeArrayHandle(frame.container(), listErrors.toArray(Utils.NO_NAMES));
}
compiler.reset();
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xContainerControl.java b/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xContainerControl.java
index 25bf7ec28f..300ebb79c5 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xContainerControl.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xContainerControl.java
@@ -38,14 +38,8 @@
*/
public class xContainerControl
extends xRTServiceControl {
- public static xContainerControl INSTANCE;
-
- public xContainerControl(Container container, ClassStructure structure, boolean fInstance) {
+ public xContainerControl(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xContainerLinker.java b/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xContainerLinker.java
index ded5e12c3d..584b3cfb00 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xContainerLinker.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xContainerLinker.java
@@ -50,14 +50,8 @@
*/
public class xContainerLinker
extends xService {
- public static xContainerLinker INSTANCE;
-
- public xContainerLinker(Container container, ClassStructure structure, boolean fInstance) {
+ public xContainerLinker(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -159,7 +153,7 @@ private int invokeCollectInjections(Frame frame, ObjectHandle[] ahArg, int[] aiR
TypeHandle[] ahType = new TypeHandle[cInjects];
int ix = 0;
for (InjectionKey key : setInjections) {
- ahName[ix ] = xString.makeHandle(key.f_sName);
+ ahName[ix ] = xString.makeHandle(frame, key.f_sName);
ahType[ix++] = key.f_type.ensureTypeHandle(container);
}
ArrayHandle haNames = xArray.makeStringArrayHandle(ahName);
@@ -214,7 +208,7 @@ private int invokeResolveAndLink(Frame frame, ObjectHandle[] ahArg, int iReturn)
return frame.raiseException(e);
}
- switch (xRTFileTemplate.INSTANCE.invokeResolve(frame, file, hRepo,
+ switch (f_container.nativeTemplate(xRTFileTemplate.class).invokeResolve(frame, file, hRepo,
ahShared, ahAdditional, Op.A_STACK)) {
case Op.R_NEXT:
return completeResolveAndLink(frame, container, popModule(frame),
@@ -278,7 +272,7 @@ public int doNext(Frame frameCaller) {
while (++index < aKeys.length) {
InjectionKey key = aKeys[index];
TypeHandle hType = key.f_type.ensureTypeHandle(container);
- StringHandle hName = xString.makeHandle(key.f_sName);
+ StringHandle hName = xString.makeHandle(frameCaller, key.f_sName);
CallChain chain = hProvider.getComposition().getMethodCallChain(GET_RESOURCE);
ObjectHandle[] ahArg = new ObjectHandle[chain.getMaxVars()];
@@ -304,7 +298,7 @@ public int doNext(Frame frameCaller) {
}
return frameCaller.assignValue(iReturn,
- xContainerControl.INSTANCE.makeHandle(container));
+ frameCaller.nativeTemplate(xContainerControl.class).makeHandle(container));
}
private final NestedContainer container;
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xCoreRepository.java b/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xCoreRepository.java
index 3be07be591..df83b3a648 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xCoreRepository.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/mgmt/xCoreRepository.java
@@ -33,14 +33,8 @@
*/
public class xCoreRepository
extends ClassTemplate {
- public static xCoreRepository INSTANCE;
-
- public xCoreRepository(Container container, ClassStructure structure, boolean fInstance) {
+ public xCoreRepository(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -68,7 +62,7 @@ public int invokeNativeGet(Frame frame, String sPropName, ObjectHandle hTarget,
ModuleRepository repo = f_container.getModuleRepository();
Set setNames = repo.getModuleNames();
- ArrayHandle hArray = xString.makeArrayHandle(setNames.toArray(Utils.NO_NAMES));
+ ArrayHandle hArray = xString.makeArrayHandle(frame.container(), setNames.toArray(Utils.NO_NAMES));
return xArray.createListSet(frame, hArray, iReturn);
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNameService.java b/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNameService.java
index e76637353b..a41ec8514b 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNameService.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNameService.java
@@ -50,14 +50,8 @@
*/
public class xRTNameService
extends xService {
- public static xRTNameService INSTANCE;
-
- public xRTNameService(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTNameService(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -92,7 +86,8 @@ public int invokeNative1(Frame frame, MethodStructure method, ObjectHandle hTarg
if (frame.f_context != hService.f_context) {
// for now let's make sure all the calls are processed on the service fibers
- return xRTFunction.makeAsyncNativeHandle(method).call1(frame, hTarget, ahArg, iReturn);
+ return xRTFunction.makeAsyncNativeHandle(frame.container(), method).
+ call1(frame, hTarget, ahArg, iReturn);
}
switch (method.getName()) {
@@ -106,7 +101,7 @@ public int invokeNative1(Frame frame, MethodStructure method, ObjectHandle hTarg
Frame.Continuation continuation = frameCaller -> {
try {
return frameCaller.assignValue(iReturn,
- xString.makeArrayHandle(cfRecords.get()));
+ xString.makeArrayHandle(frame.container(), cfRecords.get()));
} catch (Throwable e) {
return frameCaller.raiseException(
xException.obscureIoException(frameCaller, exceptionMessage(e)));
@@ -126,7 +121,8 @@ public int invokeNativeNN(Frame frame, MethodStructure method, ObjectHandle hTar
if (frame.f_context != hService.f_context) {
// for now let's make sure all the calls are processed on the service fibers
- return xRTFunction.makeAsyncNativeHandle(method).callN(frame, hTarget, ahArg, aiReturn);
+ return xRTFunction.makeAsyncNativeHandle(frame.container(), method).
+ callN(frame, hTarget, ahArg, aiReturn);
}
switch (method.getName()) {
@@ -176,7 +172,7 @@ public int invokeNativeNN(Frame frame, MethodStructure method, ObjectHandle hTar
String sNotName = addr.getHostAddress();
if (sName != null && !sName.isEmpty() && !sName.equals(sNotName)) {
return frameCaller.assignValues(aiReturn,
- xBoolean.TRUE, xString.makeHandle(sName));
+ xBoolean.TRUE, xString.makeHandle(frame, sName));
}
} catch (Exception ignore) {
// REVIEW CP: do we want to report the reason somehow?
@@ -196,7 +192,7 @@ public int invokeNativeNN(Frame frame, MethodStructure method, ObjectHandle hTar
// ----- helpers ------------------------------------------------------------------------------
static TypeComposition ensureByteArrayArrayComposition(Container container) {
- return container.ensureClassComposition(BYTE_ARRAY_ARRAY_TYPE, xArray.INSTANCE);
+ return container.ensureClassComposition(BYTE_ARRAY_ARRAY_TYPE, container.nativeTemplate(xArray.class));
}
static String[] getAllRecords(String sName)
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNetwork.java b/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNetwork.java
index bea71e09c0..0a8dd41513 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNetwork.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNetwork.java
@@ -36,14 +36,8 @@
*/
public class xRTNetwork
extends xService {
- public static xRTNetwork INSTANCE;
-
- public xRTNetwork(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTNetwork(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -91,7 +85,8 @@ public int invokeNativeN(Frame frame, MethodStructure method,
if (frame.f_context != hService.f_context) {
// for now let's make sure all the calls are processed on the service fibers
- return xRTFunction.makeAsyncNativeHandle(method).call1(frame, hTarget, ahArg, iReturn);
+ return xRTFunction.makeAsyncNativeHandle(frame.container(), method).
+ call1(frame, hTarget, ahArg, iReturn);
}
switch (method.getName()) {
@@ -109,7 +104,8 @@ public int invokeNativeNN(Frame frame, MethodStructure method, ObjectHandle hTar
if (frame.f_context != hService.f_context) {
// for now let's make sure all the calls are processed on the service fibers
- return xRTFunction.makeAsyncNativeHandle(method).callN(frame, hTarget, ahArg, aiReturn);
+ return xRTFunction.makeAsyncNativeHandle(frame.container(), method).
+ callN(frame, hTarget, ahArg, aiReturn);
}
switch (method.getName()) {
@@ -199,7 +195,7 @@ public boolean isSecure(Frame frame, ServiceHandle hNetwork) {
* @return one of Op.R_NEXT, Op.R_CALL or Op.R_EXCEPTION values
*/
protected int instantiateNameService(Frame frame, ServiceHandle hNetwork, int iReturn) {
- ClassTemplate templateSvc = xRTNameService.INSTANCE;
+ ClassTemplate templateSvc = f_container.nativeTemplate(xRTNameService.class);
ClassComposition clz = templateSvc.getCanonicalClass();
MethodStructure constructor = templateSvc.getStructure().findConstructor(getCanonicalType());
ObjectHandle[] ahParams = new ObjectHandle[constructor.getMaxVars()];
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNetworkInterface.java b/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNetworkInterface.java
index 5451188df6..3f70c7d506 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNetworkInterface.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTNetworkInterface.java
@@ -28,14 +28,8 @@
*/
public class xRTNetworkInterface
extends xService {
- public static xRTNetworkInterface INSTANCE;
-
- public xRTNetworkInterface(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTNetworkInterface(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -78,7 +72,8 @@ public int invokeNativeNN(Frame frame, MethodStructure method, ObjectHandle hTar
if (frame.f_context != hService.f_context) {
// for now let's make sure all the calls are processed on the service fibers
- return xRTFunction.makeAsyncNativeHandle(method).callN(frame, hTarget, ahArg, aiReturn);
+ return xRTFunction.makeAsyncNativeHandle(frame.container(), method).
+ callN(frame, hTarget, ahArg, aiReturn);
}
switch (method.getName()) {
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTSocket.java b/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTSocket.java
index f23e81a151..ab27b61d5b 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTSocket.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/net/xRTSocket.java
@@ -51,16 +51,10 @@
*/
public class xRTSocket
extends xService {
- public static xRTSocket INSTANCE;
-
public static final int CONNECT_TIMEOUT_MS = 15_000;
- public xRTSocket(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTSocket(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -108,7 +102,7 @@ public int invokeNative1(Frame frame, MethodStructure method, ObjectHandle hTarg
}
if (frame.f_context != hSocket.f_context) {
- return xRTFunction.makeAsyncNativeHandle(method).
+ return xRTFunction.makeAsyncNativeHandle(frame.container(), method).
call1(frame, hTarget, new ObjectHandle[] {hArg}, iReturn);
}
@@ -129,7 +123,8 @@ public int invokeNativeN(Frame frame, MethodStructure method,
}
if (frame.f_context != hSocket.f_context) {
- return xRTFunction.makeAsyncNativeHandle(method).call1(frame, hTarget, ahArg, iReturn);
+ return xRTFunction.makeAsyncNativeHandle(frame.container(), method).
+ call1(frame, hTarget, ahArg, iReturn);
}
switch (method.getName()) {
@@ -175,7 +170,8 @@ public static int connect(Frame frame, byte[] abRemoteIP, int nRemotePort,
InetAddress local = socket.getLocalAddress();
byte[] abLocal = local == null ? new byte[0] : local.getAddress();
int nLocal = socket.getLocalPort();
- return INSTANCE.constructSocket(frameCaller, socket, abLocal, nLocal,
+ return frame.nativeTemplate(xRTSocket.class).
+ constructSocket(frameCaller, socket, abLocal, nLocal,
abRemoteIP, nRemotePort, aiReturn);
} catch (Throwable e) {
Throwable cause = unwrap(e);
@@ -228,9 +224,9 @@ protected int constructSocket(Frame frame, Socket socket, byte[] abLocal, int nL
pool.typeByteArray(), pool.typeUInt16());
ObjectHandle[] ahParams = new ObjectHandle[constructor.getMaxVars()];
ahParams[0] = xArray.makeByteArrayHandle(abLocal, Mutability.Constant);
- ahParams[1] = xUInt16.INSTANCE.makeJavaLong(nLocalPort);
+ ahParams[1] = f_container.nativeTemplate(xUInt16.class).makeJavaLong(nLocalPort);
ahParams[2] = xArray.makeByteArrayHandle(abRemote, Mutability.Constant);
- ahParams[3] = xUInt16.INSTANCE.makeJavaLong(nRemotePort);
+ ahParams[3] = f_container.nativeTemplate(xUInt16.class).makeJavaLong(nRemotePort);
switch (template.construct(frame, constructor, clz, null, ahParams, Op.A_STACK)) {
case Op.R_NEXT:
@@ -358,13 +354,13 @@ private static int invokeWriteBytesImpl(Frame frame, SocketHandle hSocket, Objec
private static int invokeAvailableImpl(Frame frame, SocketHandle hSocket, int iReturn) {
Socket socket = hSocket.socket;
if (socket == null || socket.isClosed()) {
- return frame.assignValue(iReturn, xInt64.INSTANCE.makeJavaLong(0));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, 0));
}
try {
int n = socket.getInputStream().available();
- return frame.assignValue(iReturn, xInt64.INSTANCE.makeJavaLong(Math.max(n, 0)));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, Math.max(n, 0)));
} catch (IOException e) {
- return frame.assignValue(iReturn, xInt64.INSTANCE.makeJavaLong(0));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, 0));
}
}
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/numbers/xRTRandom.java b/javatools/src/main/java/org/xvm/runtime/template/_native/numbers/xRTRandom.java
index 71c79ea3db..40c65eb6cc 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/numbers/xRTRandom.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/numbers/xRTRandom.java
@@ -48,14 +48,8 @@
*/
public class xRTRandom
extends xService {
- public static xRTRandom INSTANCE;
-
- public xRTRandom(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTRandom(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
@@ -151,42 +145,49 @@ public int invokeNativeN(Frame frame, MethodStructure method,
return frame.assignValue(iReturn, xBit.makeHandle(rnd(hTarget).nextBoolean()));
case "nibble":
- return frame.assignValue(iReturn, xNibble.makeHandle(rnd(hTarget).nextInt()));
+ return frame.assignValue(iReturn, xNibble.makeHandle(frame, rnd(hTarget).nextInt()));
case "int8":
- return frame.assignValue(iReturn, xInt8.INSTANCE.makeJavaLong(rnd(hTarget).nextInt()));
+ return frame.assignValue(iReturn, f_container.nativeTemplate(xInt8.class).makeJavaLong(rnd(hTarget).nextInt()));
case "int16":
- return frame.assignValue(iReturn, xInt16.INSTANCE.makeJavaLong(rnd(hTarget).nextInt()));
+ return frame.assignValue(iReturn, f_container.nativeTemplate(xInt16.class).makeJavaLong(rnd(hTarget).nextInt()));
case "int32":
- return frame.assignValue(iReturn, xInt32.INSTANCE.makeJavaLong(rnd(hTarget).nextInt()));
+ return frame.assignValue(iReturn, f_container.nativeTemplate(xInt32.class).makeJavaLong(rnd(hTarget).nextInt()));
case "int64":
- return frame.assignValue(iReturn, xInt64.INSTANCE.makeJavaLong(rnd(hTarget).nextLong()));
+ return frame.assignValue(iReturn,
+ f_container.nativeTemplate(xInt64.class).makeJavaLong(rnd(hTarget).nextLong()));
case "uint8":
- return frame.assignValue(iReturn, xUInt8.INSTANCE.makeJavaLong(rnd(hTarget).nextInt()));
+ return frame.assignValue(iReturn, f_container.nativeTemplate(xUInt8.class).makeJavaLong(rnd(hTarget).nextInt()));
case "uint16":
- return frame.assignValue(iReturn, xUInt16.INSTANCE.makeJavaLong(rnd(hTarget).nextInt()));
+ return frame.assignValue(iReturn,
+ f_container.nativeTemplate(xUInt16.class).makeJavaLong(rnd(hTarget).nextInt()));
case "uint32":
- return frame.assignValue(iReturn, xUInt32.INSTANCE.makeJavaLong(rnd(hTarget).nextInt()));
+ return frame.assignValue(iReturn,
+ f_container.nativeTemplate(xUInt32.class).makeJavaLong(rnd(hTarget).nextInt()));
case "uint64":
- return frame.assignValue(iReturn, xUInt64.INSTANCE.makeJavaLong(rnd(hTarget).nextLong()));
+ return frame.assignValue(iReturn,
+ f_container.nativeTemplate(xUInt64.class).makeJavaLong(rnd(hTarget).nextLong()));
case "dec64":
// Float64 has more precision than Dec64, so this should work fine, although there
// won't be as solid of a guarantee on a perfect distribution of random values
- return frame.assignValue(iReturn, xDec64.INSTANCE.makeHandle(rnd(hTarget).nextDouble()));
+ return frame.assignValue(iReturn,
+ f_container.nativeTemplate(xDec64.class).makeHandle(rnd(hTarget).nextDouble()));
case "float32":
- return frame.assignValue(iReturn, xFloat32.INSTANCE.makeHandle(rnd(hTarget).nextFloat()));
+ return frame.assignValue(iReturn,
+ f_container.nativeTemplate(xFloat32.class).makeHandle(rnd(hTarget).nextFloat()));
case "float64":
- return frame.assignValue(iReturn, xFloat64.INSTANCE.makeHandle(rnd(hTarget).nextDouble()));
+ return frame.assignValue(iReturn,
+ f_container.nativeTemplate(xFloat64.class).makeHandle(rnd(hTarget).nextDouble()));
}
return super.invokeNativeN(frame, method, hTarget, ahArg, iReturn);
@@ -242,7 +243,7 @@ protected int invokeInt(Frame frame, ObjectHandle hTarget, ObjectHandle hArg, in
"Illegal exclusive maximum (" + lMax +"); maximum must be > 0"));
}
- return frame.assignValue(iReturn, xInt64.makeHandle(computeRandom(rnd, lMax)));
+ return frame.assignValue(iReturn, xInt64.makeHandle(frame, computeRandom(rnd, lMax)));
}
/**
diff --git a/javatools/src/main/java/org/xvm/runtime/template/_native/reflect/xRTClassTemplate.java b/javatools/src/main/java/org/xvm/runtime/template/_native/reflect/xRTClassTemplate.java
index 50baaeff3f..03dcfb14a2 100644
--- a/javatools/src/main/java/org/xvm/runtime/template/_native/reflect/xRTClassTemplate.java
+++ b/javatools/src/main/java/org/xvm/runtime/template/_native/reflect/xRTClassTemplate.java
@@ -49,19 +49,13 @@
*/
public class xRTClassTemplate
extends xRTComponentTemplate {
- public static xRTClassTemplate INSTANCE;
-
- public xRTClassTemplate(Container container, ClassStructure structure, boolean fInstance) {
+ public xRTClassTemplate(Container container, ClassStructure structure, boolean fBaseTemplate) {
super(container, structure, false);
-
- if (fInstance) {
- INSTANCE = this;
- }
}
@Override
public void initNative() {
- if (this == INSTANCE) {
+ if (isNativeInstance(xRTClassTemplate.class)) {
ConstantPool pool = f_container.getConstantPool();
ACTION_TEMPLATE = (xEnum) f_container.getTemplate("reflect.ClassTemplate.Composition.Action");
@@ -183,7 +177,7 @@ public int getPropertyImplicitName(Frame frame, ComponentTemplateHandle hCompone
if (id instanceof ClassConstant idClz) {
String sAlias = idClz.getImplicitImportName();
if (sAlias != null) {
- return frame.assignValue(iReturn, xString.makeHandle(sAlias));
+ return frame.assignValue(iReturn, xString.makeHandle(frame, sAlias));
}
}
return frame.assignValue(iReturn, xNullable.NULL);
@@ -277,7 +271,7 @@ public int getPropertyContribs(Frame frame, ComponentTemplateHandle hComponent,
for (int i = 0; i < cParams; i++) {
Parameter param = ctor.getParam(i);
- ahNames[i] = xString.makeHandle(param.getName());
+ ahNames[i] = xString.makeHandle(container, param.getName());
if (ahParam[i] == null) {
if (!param.hasDefaultValue()) {
return frameCaller.raiseException(
@@ -332,7 +326,7 @@ public int getPropertyContribs(Frame frame, ComponentTemplateHandle hComponent,
TypeConstant type = entry.getValue();
// use Type