private void compileDefines() {
		for (Iterator<TopLvlItem> it = prog.getProlist().iterator(); it
				.hasNext();) {
			TopLvlItem formItem = it.next();
			// compile all defines into symbol table
			Node form = formItem.getMainForm().getNode(); // get a program form
			formSymbolTable = formItem.getMST(); // get the form symbol table
			Node tl = form.getLeft();
			Node tr = form.getRight();

			if (tl != null && tl.getType() == TokenType.DEFINE) {
				// several define forms.... first is (define x value)

				if (tr.getLeft().getType() == TokenType.SYMBOL) {
					// named object
					// simple number ?
					switch (tr.getRight().getLeft().getType()) {
					case NUMBER:
						String num = tr.getRight().getLeft().getValue();
						// System.out.println(topTable);
						topTable.add(tr.getLeft().getValue(), new ObjectValue(
								ObjectType.SCHEME_NUMBER, new Double(num)));
						break;
					case STRING:
						String str = tr.getRight().getLeft().getValue();
						// System.out.println(topTable);
						topTable.add(tr.getLeft().getValue(), new ObjectValue(
								ObjectType.SCHEME_STRING, str));
						break;
					case OPEN_LIST: // openlist gets us in lambda and other
									// forms
						// cheat for now just save the list
						Node lstCar = tr.getRight().getLeft();
						// full closure not present ... one too many close
						// parens
						lstCar = removeTail(lstCar);
						topTable.add(tr.getLeft().getValue(), new ObjectValue(
								ObjectType.SCHEME_PAIR, lstCar));
						break;
					default:
						System.out.print("Define for "
								+ tr.getRight().getLeft().getType());
						System.out.println("  value: "
								+ tr.getLeft().getValue());
					}
				}

				// remove this form from program list
				it.remove();
			}
		}
	}