package akin.lang.nodes; import java.util.List; import akin.lang.*; public class ClassDefinitionNode extends Node { private String name; private String superName; private Node body; public ClassDefinitionNode(String name, String superName, Node body) { this.name = name; this.superName = superName; this.body = body; } public AkinObject eval(Context context) throws AkinException { AkinClass klass; // Default superclass to Object. if (superName == null) { klass = new AkinClass(name); } else { AkinClass superClass = (AkinClass) context.getCurrentClass().getConstant(superName); klass = new AkinClass(name, superClass); } // Evaluated the body of the class with self=class and class=class. body.eval(new Context(klass, klass)); // Add the class as a constant context.getCurrentClass().setConstant(name, klass); return klass; } }