package org.overture.interpreter.runtime.state;
import org.overture.ast.modules.AModuleModules;
import org.overture.interpreter.runtime.Context;
import org.overture.interpreter.runtime.IRuntimeState;
import org.overture.interpreter.util.Delegate;
import org.overture.interpreter.values.Value;
import org.overture.typechecker.assistant.ITypeCheckerAssistantFactory;
public class AModuleModulesRuntime implements IRuntimeState
{
/** A delegate Java class, if one exists. */
private Delegate delegate = null;
/** A delegate Java object, if one exists. */
private Object delegateObject = null;
public final ITypeCheckerAssistantFactory assistantFactory;
public AModuleModulesRuntime(AModuleModules node,
ITypeCheckerAssistantFactory af)
{
delegate = new Delegate(node.getName().getName(), node.getDefs());
this.assistantFactory = af;
}
public boolean hasDelegate()
{
if (delegate.hasDelegate(assistantFactory))
{
if (delegateObject == null)
{
delegateObject = delegate.newInstance();
}
return true;
}
return false;
}
public Value invokeDelegate(Context ctxt)
{
return delegate.invokeDelegate(delegateObject, ctxt);
}
}