org.snapscript.tree.define.EnumBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of snap-all Show documentation
Show all versions of snap-all Show documentation
Dynamic scripting for the JVM
package org.snapscript.tree.define;
import java.util.ArrayList;
import java.util.List;
import org.snapscript.core.Module;
import org.snapscript.core.Result;
import org.snapscript.core.ResultType;
import org.snapscript.core.Scope;
import org.snapscript.core.Statement;
import org.snapscript.core.Type;
public class EnumBuilder extends Statement {
private final EnumConstantBuilder builder;
private final TypeHierarchy hierarchy;
private final TypeName name;
private final List values;
public EnumBuilder(TypeName name, TypeHierarchy hierarchy) {
this.builder = new EnumConstantBuilder();
this.values = new ArrayList();
this.hierarchy = hierarchy;
this.name = name;
}
@Override
public Result define(Scope outer) throws Exception {
Module module = outer.getModule();
String alias = name.getName(outer);
Type type = module.addType(alias);
return ResultType.getNormal(type);
}
@Override
public Result compile(Scope outer) throws Exception {
Module module = outer.getModule();
String alias = name.getName(outer);
Type type = module.getType(alias);
Scope scope = type.getScope();
builder.declare(scope, type, values);
hierarchy.update(scope, type); // this may throw exception if missing type
return ResultType.getNormal(type);
}
}