org.protelis.lang.interpreter.impl.Constant Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of protelis-interpreter Show documentation
Show all versions of protelis-interpreter Show documentation
The Protelis language interpreter
/*
* Copyright (C) 2021, Danilo Pianini and contributors listed in the project's build.gradle.kts or pom.xml file.
*
* This file is part of Protelis, and is distributed under the terms of the GNU General Public License,
* with a linking exception, as described in the file LICENSE.txt in this project's top directory.
*/
package org.protelis.lang.interpreter.impl;
import java.util.Objects;
import org.protelis.lang.interpreter.util.Bytecode;
import org.protelis.lang.loading.Metadata;
import org.protelis.vm.ExecutionContext;
/**
* An arbitrary object-valued constant.
*
* @param the type of the constant
*/
public class Constant extends AbstractProtelisAST {
private static final long serialVersionUID = 1L;
private final T constantValue;
/**
* @param metadata
* A {@link Metadata} object containing information about the code that generated this AST node.
* @param obj
* the constant to be associated
*/
public Constant(final Metadata metadata, final T obj) {
super(metadata);
Objects.requireNonNull(obj);
constantValue = obj;
}
@Override
public final T evaluate(final ExecutionContext context) {
return constantValue;
}
@Override
public final Bytecode getBytecode() {
return Bytecode.CONSTANT;
}
/**
* {@inheritDoc}
*/
@Override
public String getName() {
return constantValue.toString();
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
return getName();
}
/**
* @return the value associated to this constant
*/
public final T getConstantValue() {
return constantValue;
}
}