package rpn.basic;

import java.util.Hashtable;
import rpn.Calculator;

public class DefItem extends Item {
	
	public DefItem(Calculator ca) {
		super(ca);
		ca.systemInstall(this);
	}
	
	public void exec() {
		if (ca.check(2)) {
			Item a = ca.peek(0);
			Item b = ca.peek(1);
			// define a to be b
			if (a instanceof LiteralItem) {
				// System.out.println("Defing " + ((LiteralItem) a).s);
				// System.out.println("dict size = " + ca.dictStackSize());
				Hashtable h = ca.currentDict();
				h.put(((LiteralItem) a).s, b);
				ca.pop(2);
			} else if (a instanceof IndexItem) {
				ArrayItem I = ((IndexItem) a).a;
				int m = ((IndexItem) a).i;
				if (0 <= m && m < I.size()) {
					I.put(b, m);
					ca.pop(2);
				} else {
					ca.error(this, CalcErr.Range);
				}
			} else {
				ca.error(this, CalcErr.Type);
			}
		} else {
			ca.error(this, CalcErr.Underflow);
		}
	}
	
	public String toString() {
		return("def");
	}
}