	public void set(StackFrame frame, String name, ASMOclAny value) {
		final boolean debug = false;
		if (debug) {
			ATLLogger.info("Setting: " + this + " : " + getType() + "." + name + " to " + value);
		}
		super.set(frame, name, value);
		EStructuralFeature feature = object.eClass().getEStructuralFeature(name);
		if ("__xmiID__".equals(name)) {
			Resource r = ((ASMEMFModel)getModel()).getExtent();
			ATLLogger.warning("Manual setting of " + this + ":" + getType() + " XMI ID.");
			((XMLResource)r).setID(object, ((ASMString)value).cString());
			return;
		}
		if (frame != null) {
			ASMExecEnv execEnv = (ASMExecEnv)frame.getExecEnv();
			if (execEnv.isWeavingHelper(getMetaobject(), name)) {
				execEnv.setHelperValue(frame, this, name, value);
				return;
			}
		}
		if (feature == null) {
			throw new VMException(frame, "Feature " + name + " does not exist on " + getType(), null);
		} else {
			if (!feature.isChangeable()) {
				throw new VMException(frame, "Feature " + name + " is not changeable", null);
			}
			if (feature.isMany()) {
				EList l = (EList)object.eGet(feature);
				if (value instanceof ASMCollection) {
					for (Iterator i = ((ASMCollection)value).iterator(); i.hasNext();) {
						ASMOclAny sv = (ASMOclAny)i.next();
						if (isNotAssignable(feature, sv)) {
							continue;
						}
						Object val = asm2EMF(frame, sv, name, feature);
						if (val != null) {
							try {
								l.add(val);
								checkContainment(feature, val);
							} catch (Exception e) {
								throw new VMException(frame, "Cannot set feature " + getType() + "." + name
										+ " to value " + val, e);
							}
						}
					}
				} else {
					Object val = asm2EMF(frame, value, name, feature);
					l.add(val);
					checkContainment(feature, val);
				}
			} else {
				if (isNotAssignable(feature, value)) {
				} else {
					Object val = asm2EMF(frame, value, name, feature);
					if (val != null) {
						try {
							object.eSet(feature, val);
							checkContainment(feature, val);
						} catch (Exception e) {
							throw new VMException(frame, "Cannot set feature " + getType() + "." + name
									+ " to value " + val, e);
						}
					}
				}
			}
		}
	}

	public void set(StackFrame frame, String name, ASMOclAny value) {
		final boolean debug = false;
		if (debug) {
			ATLLogger.info("Setting: " + this + " : " + getType() + "." + name + " to " + value);
		}
		super.set(frame, name, value);
		EStructuralFeature feature = object.eClass().getEStructuralFeature(name);
		if ("__xmiID__".equals(name)) {
			Resource r = ((ASMEMFModel)getModel()).getExtent();
			ATLLogger.warning("Manual setting of " + this + ":" + getType() + " XMI ID.");
			((XMLResource)r).setID(object, ((ASMString)value).cString());
			return;
		}
		if (frame != null) {
			ASMExecEnv execEnv = (ASMExecEnv)frame.getExecEnv();
			if (execEnv.isWeavingHelper(getMetaobject(), name)) {
				execEnv.setHelperValue(frame, this, name, value);
				return;
			}
		}
		if (feature == null) {
			throw new VMException(frame, "Feature " + name + " does not exist on " + getType(), null);
		} else {
			if (!feature.isChangeable()) {
				throw new VMException(frame, "Feature " + name + " is not changeable", null);
			}
			if (feature.isMany()) {
				EList l = (EList)object.eGet(feature);
				if (value instanceof ASMCollection) {
					for (Iterator i = ((ASMCollection)value).iterator(); i.hasNext();) {
						ASMOclAny sv = (ASMOclAny)i.next();
						if (isNotAssignable(feature, sv)) {
							continue;
						}
						Object val = asm2EMF(frame, sv, name, feature);
						if (val != null) {
							try {
								l.add(val);
								checkContainment(feature, val);
							} catch (Exception e) {
								throw new VMException(frame, "Cannot set feature " + getType() + "." + name
										+ " to value " + val, e);
							}
						}
					}
				} else {
					if (!isNotAssignable(feature, value)) {
						Object val = asm2EMF(frame, value, name, feature);
						l.add(val);
						checkContainment(feature, val);
					}
				}
			} else {
				if (isNotAssignable(feature, value)) {
				} else {
					Object val = asm2EMF(frame, value, name, feature);
					if (val != null) {
						try {
							object.eSet(feature, val);
							checkContainment(feature, val);
						} catch (Exception e) {
							throw new VMException(frame, "Cannot set feature " + getType() + "." + name
									+ " to value " + val, e);
						}
					}
				}
			}
		}
	}
