public Descriptor compile(SymbolTable symbolTable) {
		// prevent overriding of constants
		if (key instanceof IdentNode && symbolTable.descriptorFor(((IdentNode) key).getIdentName()) instanceof IntConstDescriptor) {
			throw new CompilerException("Constant " + ((IdentNode) key).getIdentName() + " cannot be overriden");
		}
		Descriptor rightDescr = value.compile(symbolTable);
		if (rightDescr instanceof RecordDescriptor || rightDescr instanceof ArrayDescriptor) {
			Descriptor leftDescr = key.compile(symbolTable);

			if (!leftDescr.equals(rightDescr)) {
				throw new CompilerException("left type (" + leftDescr + ") is not compatible with right type (" + rightDescr + ")");
			}

			write("ASSIGN, " + rightDescr.size());
		} else {
			key.compile(symbolTable);
			write("ASSIGN, 1");
		}
		return null;
	}