diff options
author | dwagelaar | 2013-08-01 19:47:40 +0000 |
---|---|---|
committer | dwagelaar | 2013-08-01 19:47:40 +0000 |
commit | 8489908c225e1cf646755ca0ed5fc43a281f6cc4 (patch) | |
tree | df53170ef149e097db9d28dd3af30e583dcfe3ff /plugins | |
parent | 81b677bf2f5928ac2e51d1803096ab0456c9dc66 (diff) | |
download | org.eclipse.atl-8489908c225e1cf646755ca0ed5fc43a281f6cc4.tar.gz org.eclipse.atl-8489908c225e1cf646755ca0ed5fc43a281f6cc4.tar.xz org.eclipse.atl-8489908c225e1cf646755ca0ed5fc43a281f6cc4.zip |
Fix + test + bytecode format change.
413110: Refining mode rules resolves default traces to the second target
element when available
https://bugs.eclipse.org/bugs/show_bug.cgi?id=413110
Diffstat (limited to 'plugins')
53 files changed, 607 insertions, 164 deletions
diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLWFR.emftvm b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLWFR.emftvm Binary files differindex a935730e..95dd8185 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLWFR.emftvm +++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLWFR.emftvm diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl index 4e33e4fa..522e9419 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl +++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.atl @@ -200,10 +200,18 @@ helper context ATL!VariableDeclaration def : isRefiningElement : Boolean = --- Returns 'true' if self is an output element that represents a refined input element. helper context ATL!OutPatternElement def : isRefiningElement : Boolean = self.outModel.isRefiningModel and - (let inModel : ATL!OclModel = self.outModel.refines in - let sourceElement : ATL!InPatternElement = self.actualSourceElement in + (let sourceElement : ATL!InPatternElement = self.actualSourceElement in not sourceElement.oclIsUndefined() and sourceElement.type.sameAs(self.type)); +--- Returns 'true' if self has an output element that represents a refinement of this input element. +helper context ATL!InPatternElement def : hasRefiningElement : Boolean = + not self.inPattern."rule".outPattern.oclIsUndefined() and + self.inPattern."rule".outPattern.elements->exists(outElement | + outElement.outModel.isRefiningModel and + self = outElement.actualSourceElement and + self.type.sameAs(outElement.type) + ); + --- Returns 'OclUndefined'. helper context ATL!VariableDeclaration def : actualSourceElement : ATL!InPatternElement = OclUndefined; @@ -408,6 +416,7 @@ rule InPatternElement { name <- s.varName, type <- s.type.typeName, typeModel <- s.type.modelName, + mapsToSelf <- s.hasRefiningElement, models <- s.models->collect(m|m.name)), ov : EMFTVM!LocalVariable ( name <- s.varName, diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.emftvm b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.emftvm Binary files differindex 76996512..916d4d5c 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.emftvm +++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/ATLtoEMFTVM.emftvm diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/EMFTVMCopy.atl b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/EMFTVMCopy.atl index 8f2b651f..b7bd08ed 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/EMFTVMCopy.atl +++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/EMFTVMCopy.atl @@ -126,6 +126,7 @@ rule InputRuleElement { name <- s.name, type <- s.type, typeModel <- s.typeModel, + mapsToSelf <- s.mapsToSelf, models <- s.models, binding <- s.binding) } diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/EMFTVMCopy.emftvm b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/EMFTVMCopy.emftvm Binary files differindex 9eb34d56..345f8774 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/EMFTVMCopy.emftvm +++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/EMFTVMCopy.emftvm diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/InlineCodeblocks.emftvm b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/InlineCodeblocks.emftvm Binary files differindex 9fca0b92..eae1a5e2 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/InlineCodeblocks.emftvm +++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/InlineCodeblocks.emftvm diff --git a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.emftvm b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.emftvm Binary files differindex 300ec750..93eedced 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.emftvm +++ b/plugins/org.eclipse.m2m.atl.emftvm.compiler/transformations/OCLtoEMFTVM.emftvm diff --git a/plugins/org.eclipse.m2m.atl.emftvm.edit/META-INF/MANIFEST.MF b/plugins/org.eclipse.m2m.atl.emftvm.edit/META-INF/MANIFEST.MF index 0e2f3a07..e68b162e 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.edit/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.m2m.atl.emftvm.edit/META-INF/MANIFEST.MF @@ -14,5 +14,6 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.emf.edit;visibility:=reexport, org.eclipse.emf.ecore;visibility:=reexport, org.eclipse.emf.ecore.edit;visibility:=reexport, + org.eclipse.m2m.atl.emftvm.trace;visibility:=reexport, org.eclipse.m2m.atl.emftvm.trace.edit Bundle-ActivationPolicy: lazy diff --git a/plugins/org.eclipse.m2m.atl.emftvm.edit/plugin.properties b/plugins/org.eclipse.m2m.atl.emftvm.edit/plugin.properties index 845e5f74..f38000b8 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.edit/plugin.properties +++ b/plugins/org.eclipse.m2m.atl.emftvm.edit/plugin.properties @@ -452,3 +452,4 @@ _UI_ExecEnv_uniqueResults_feature = Unique Results _UI_Rule_withLeaves_feature = With Leaves _UI_ExecEnv_jitDisabled_feature = Jit Disabled _UI_ExecEnv_currentPhase_feature = Current Phase +_UI_InputRuleElement_mapsToSelf_feature = Maps To Self diff --git a/plugins/org.eclipse.m2m.atl.emftvm.edit/src/org/eclipse/m2m/atl/emftvm/provider/InputRuleElementItemProvider.java b/plugins/org.eclipse.m2m.atl.emftvm.edit/src/org/eclipse/m2m/atl/emftvm/provider/InputRuleElementItemProvider.java index b12c225f..f09c2317 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.edit/src/org/eclipse/m2m/atl/emftvm/provider/InputRuleElementItemProvider.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.edit/src/org/eclipse/m2m/atl/emftvm/provider/InputRuleElementItemProvider.java @@ -17,12 +17,14 @@ import java.util.List; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; import org.eclipse.emf.edit.provider.IItemPropertySource; import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; import org.eclipse.emf.edit.provider.ITreeItemContentProvider; +import org.eclipse.emf.edit.provider.ItemPropertyDescriptor; import org.eclipse.emf.edit.provider.ViewerNotification; import org.eclipse.m2m.atl.emftvm.EmftvmFactory; import org.eclipse.m2m.atl.emftvm.EmftvmPackage; @@ -64,11 +66,34 @@ public class InputRuleElementItemProvider if (itemPropertyDescriptors == null) { super.getPropertyDescriptors(object); + addMapsToSelfPropertyDescriptor(object); } return itemPropertyDescriptors; } /** + * This adds a property descriptor for the Maps To Self feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + protected void addMapsToSelfPropertyDescriptor(Object object) { + itemPropertyDescriptors.add + (createItemPropertyDescriptor + (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_InputRuleElement_mapsToSelf_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_InputRuleElement_mapsToSelf_feature", "_UI_InputRuleElement_type"), + EmftvmPackage.Literals.INPUT_RULE_ELEMENT__MAPS_TO_SELF, + true, + false, + false, + ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, + null, + null)); + } + + /** * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}. @@ -135,6 +160,9 @@ public class InputRuleElementItemProvider updateChildren(notification); switch (notification.getFeatureID(InputRuleElement.class)) { + case EmftvmPackage.INPUT_RULE_ELEMENT__MAPS_TO_SELF: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); + return; case EmftvmPackage.INPUT_RULE_ELEMENT__BINDING: fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false)); return; diff --git a/plugins/org.eclipse.m2m.atl.emftvm.editor/src/org/eclipse/m2m/atl/emftvm/presentation/EmftvmEditor.java b/plugins/org.eclipse.m2m.atl.emftvm.editor/src/org/eclipse/m2m/atl/emftvm/presentation/EmftvmEditor.java index 9f1e9806..00d2a149 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.editor/src/org/eclipse/m2m/atl/emftvm/presentation/EmftvmEditor.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.editor/src/org/eclipse/m2m/atl/emftvm/presentation/EmftvmEditor.java @@ -48,8 +48,6 @@ import org.eclipse.emf.common.ui.viewer.IViewerProvider; import org.eclipse.emf.common.util.BasicDiagnostic; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EValidator; import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; @@ -185,7 +183,7 @@ public class EmftvmEditor * <!-- end-user-doc --> * @generated */ - protected PropertySheetPage propertySheetPage; + protected List<PropertySheetPage> propertySheetPages = new ArrayList<PropertySheetPage>(); /** * This is the viewer that shadows the selection in the content outline. @@ -304,7 +302,7 @@ public class EmftvmEditor } } else if (p instanceof PropertySheet) { - if (((PropertySheet)p).getCurrentPage() == propertySheetPage) { + if (propertySheetPages.contains(((PropertySheet)p).getCurrentPage())) { getActionBarContributor().setActiveEditor(EmftvmEditor.this); handleActivate(); } @@ -416,6 +414,15 @@ public class EmftvmEditor @Override protected void unsetTarget(Resource target) { basicUnsetTarget(target); + resourceToDiagnosticMap.remove(target); + if (updateProblemIndication) { + getSite().getShell().getDisplay().asyncExec + (new Runnable() { + public void run() { + updateProblemIndication(); + } + }); + } } }; @@ -449,6 +456,7 @@ public class EmftvmEditor } } } + return false; } return true; @@ -687,8 +695,14 @@ public class EmftvmEditor if (mostRecentCommand != null) { setSelectionToViewer(mostRecentCommand.getAffectedObjects()); } - if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) { - propertySheetPage.refresh(); + for (Iterator<PropertySheetPage> i = propertySheetPages.iterator(); i.hasNext(); ) { + PropertySheetPage propertySheetPage = i.next(); + if (propertySheetPage.getControl().isDisposed()) { + i.remove(); + } + else { + propertySheetPage.refresh(); + } } } }); @@ -1352,23 +1366,22 @@ public class EmftvmEditor * @generated */ public IPropertySheetPage getPropertySheetPage() { - if (propertySheetPage == null) { - propertySheetPage = - new ExtendedPropertySheetPage(editingDomain) { - @Override - public void setSelectionToViewer(List<?> selection) { - EmftvmEditor.this.setSelectionToViewer(selection); - EmftvmEditor.this.setFocus(); - } + PropertySheetPage propertySheetPage = + new ExtendedPropertySheetPage(editingDomain) { + @Override + public void setSelectionToViewer(List<?> selection) { + EmftvmEditor.this.setSelectionToViewer(selection); + EmftvmEditor.this.setFocus(); + } - @Override - public void setActionBars(IActionBars actionBars) { - super.setActionBars(actionBars); - getActionBarContributor().shareGlobalActions(this, actionBars); - } - }; - propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory)); - } + @Override + public void setActionBars(IActionBars actionBars) { + super.setActionBars(actionBars); + getActionBarContributor().shareGlobalActions(this, actionBars); + } + }; + propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory)); + propertySheetPages.add(propertySheetPage); return propertySheetPage; } @@ -1487,7 +1500,7 @@ public class EmftvmEditor /** * This returns whether something has been persisted to the URI of the specified resource. - * The implementation uses the URI converter from the editor's resource set to try to open an input stream. + * The implementation uses the URI converter from the editor's resource set to try to open an input stream. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated @@ -1559,20 +1572,9 @@ public class EmftvmEditor * @generated */ public void gotoMarker(IMarker marker) { - try { - if (marker.getType().equals(EValidator.MARKER)) { - String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null); - if (uriAttribute != null) { - URI uri = URI.createURI(uriAttribute); - EObject eObject = editingDomain.getResourceSet().getEObject(uri, true); - if (eObject != null) { - setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject))); - } - } - } - } - catch (CoreException exception) { - EmftvmEditorPlugin.INSTANCE.log(exception); + List<?> targetObjects = markerHelper.getTargetObjects(editingDomain, marker); + if (!targetObjects.isEmpty()) { + setSelectionToViewer(targetObjects); } } @@ -1763,7 +1765,7 @@ public class EmftvmEditor getActionBarContributor().setActiveEditor(null); } - if (propertySheetPage != null) { + for (PropertySheetPage propertySheetPage : propertySheetPages) { propertySheetPage.dispose(); } diff --git a/plugins/org.eclipse.m2m.atl.emftvm.launcher/META-INF/MANIFEST.MF b/plugins/org.eclipse.m2m.atl.emftvm.launcher/META-INF/MANIFEST.MF index 2904c222..568b31dc 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.launcher/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.m2m.atl.emftvm.launcher/META-INF/MANIFEST.MF @@ -15,8 +15,11 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.jface.text;bundle-version="3.5.0", org.eclipse.ui.console;bundle-version="3.4.0", org.eclipse.m2m.atl.adt.ui;bundle-version="3.1.0", - org.eclipse.m2m.atl.debug.core;bundle-version="3.1.0" + org.eclipse.m2m.atl.debug.core;bundle-version="3.1.0", + org.eclipse.m2m.atl.profiler.core;bundle-version="3.1.0" Bundle-RequiredExecutionEnvironment: J2SE-1.5 Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.m2m.atl.emftvm.launcher, - org.eclipse.m2m.atl.emftvm.launcher.debug + org.eclipse.m2m.atl.emftvm.launcher.debug, + org.eclipse.m2m.atl.emftvm.profiler, + org.eclipse.m2m.atl.emftvm.profiler.adapter diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace.edit/plugin.properties b/plugins/org.eclipse.m2m.atl.emftvm.trace.edit/plugin.properties index 026ba7d0..53b50ed8 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace.edit/plugin.properties +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace.edit/plugin.properties @@ -49,3 +49,4 @@ _UI_SourceElementList_uniqueFor_feature = Unique For _UI_Unknown_feature = Unspecified _UI_TraceElement_runtimeObject_feature = Runtime Object +_UI_SourceElement_mapsToSelf_feature = Maps To Self diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace.edit/src/org/eclipse/m2m/atl/emftvm/trace/provider/SourceElementItemProvider.java b/plugins/org.eclipse.m2m.atl.emftvm.trace.edit/src/org/eclipse/m2m/atl/emftvm/trace/provider/SourceElementItemProvider.java index 5398c3c6..95479195 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace.edit/src/org/eclipse/m2m/atl/emftvm/trace/provider/SourceElementItemProvider.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace.edit/src/org/eclipse/m2m/atl/emftvm/trace/provider/SourceElementItemProvider.java @@ -16,6 +16,8 @@ import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; import org.eclipse.emf.edit.provider.IItemPropertySource; import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; import org.eclipse.emf.edit.provider.ITreeItemContentProvider; +import org.eclipse.emf.edit.provider.ItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.ViewerNotification; import org.eclipse.m2m.atl.emftvm.trace.SourceElement; import org.eclipse.m2m.atl.emftvm.trace.TracePackage; @@ -57,6 +59,7 @@ public class SourceElementItemProvider addMapsToPropertyDescriptor(object); addDefaultForPropertyDescriptor(object); addUniqueForPropertyDescriptor(object); + addMapsToSelfPropertyDescriptor(object); } return itemPropertyDescriptors; } @@ -128,6 +131,28 @@ public class SourceElementItemProvider } /** + * This adds a property descriptor for the Maps To Self feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + protected void addMapsToSelfPropertyDescriptor(Object object) { + itemPropertyDescriptors.add + (createItemPropertyDescriptor + (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_SourceElement_mapsToSelf_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_SourceElement_mapsToSelf_feature", "_UI_SourceElement_type"), + TracePackage.Literals.SOURCE_ELEMENT__MAPS_TO_SELF, + true, + false, + false, + ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, + null, + null)); + } + + /** * This returns SourceElement.gif. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -162,6 +187,12 @@ public class SourceElementItemProvider @Override public void notifyChanged(Notification notification) { updateChildren(notification); + + switch (notification.getFeatureID(SourceElement.class)) { + case TracePackage.SOURCE_ELEMENT__MAPS_TO_SELF: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); + return; + } super.notifyChanged(notification); } diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace.editor/src/org/eclipse/m2m/atl/emftvm/trace/presentation/TraceEditor.java b/plugins/org.eclipse.m2m.atl.emftvm.trace.editor/src/org/eclipse/m2m/atl/emftvm/trace/presentation/TraceEditor.java index 56188c41..307b7382 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace.editor/src/org/eclipse/m2m/atl/emftvm/trace/presentation/TraceEditor.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace.editor/src/org/eclipse/m2m/atl/emftvm/trace/presentation/TraceEditor.java @@ -41,8 +41,6 @@ import org.eclipse.emf.common.ui.viewer.IViewerProvider; import org.eclipse.emf.common.util.BasicDiagnostic; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EValidator; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.util.EContentAdapter; @@ -176,7 +174,7 @@ public class TraceEditor * <!-- end-user-doc --> * @generated */ - protected PropertySheetPage propertySheetPage; + protected List<PropertySheetPage> propertySheetPages = new ArrayList<PropertySheetPage>(); /** * This is the viewer that shadows the selection in the content outline. @@ -295,7 +293,7 @@ public class TraceEditor } } else if (p instanceof PropertySheet) { - if (((PropertySheet)p).getCurrentPage() == propertySheetPage) { + if (propertySheetPages.contains(((PropertySheet)p).getCurrentPage())) { getActionBarContributor().setActiveEditor(TraceEditor.this); handleActivate(); } @@ -407,6 +405,15 @@ public class TraceEditor @Override protected void unsetTarget(Resource target) { basicUnsetTarget(target); + resourceToDiagnosticMap.remove(target); + if (updateProblemIndication) { + getSite().getShell().getDisplay().asyncExec + (new Runnable() { + public void run() { + updateProblemIndication(); + } + }); + } } }; @@ -440,6 +447,7 @@ public class TraceEditor } } } + return false; } return true; @@ -676,8 +684,14 @@ public class TraceEditor if (mostRecentCommand != null) { setSelectionToViewer(mostRecentCommand.getAffectedObjects()); } - if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) { - propertySheetPage.refresh(); + for (Iterator<PropertySheetPage> i = propertySheetPages.iterator(); i.hasNext(); ) { + PropertySheetPage propertySheetPage = i.next(); + if (propertySheetPage.getControl().isDisposed()) { + i.remove(); + } + else { + propertySheetPage.refresh(); + } } } }); @@ -1341,23 +1355,22 @@ public class TraceEditor * @generated */ public IPropertySheetPage getPropertySheetPage() { - if (propertySheetPage == null) { - propertySheetPage = - new ExtendedPropertySheetPage(editingDomain) { - @Override - public void setSelectionToViewer(List<?> selection) { - TraceEditor.this.setSelectionToViewer(selection); - TraceEditor.this.setFocus(); - } + PropertySheetPage propertySheetPage = + new ExtendedPropertySheetPage(editingDomain) { + @Override + public void setSelectionToViewer(List<?> selection) { + TraceEditor.this.setSelectionToViewer(selection); + TraceEditor.this.setFocus(); + } - @Override - public void setActionBars(IActionBars actionBars) { - super.setActionBars(actionBars); - getActionBarContributor().shareGlobalActions(this, actionBars); - } - }; - propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory)); - } + @Override + public void setActionBars(IActionBars actionBars) { + super.setActionBars(actionBars); + getActionBarContributor().shareGlobalActions(this, actionBars); + } + }; + propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory)); + propertySheetPages.add(propertySheetPage); return propertySheetPage; } @@ -1476,7 +1489,7 @@ public class TraceEditor /** * This returns whether something has been persisted to the URI of the specified resource. - * The implementation uses the URI converter from the editor's resource set to try to open an input stream. + * The implementation uses the URI converter from the editor's resource set to try to open an input stream. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated @@ -1548,20 +1561,9 @@ public class TraceEditor * @generated */ public void gotoMarker(IMarker marker) { - try { - if (marker.getType().equals(EValidator.MARKER)) { - String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null); - if (uriAttribute != null) { - URI uri = URI.createURI(uriAttribute); - EObject eObject = editingDomain.getResourceSet().getEObject(uri, true); - if (eObject != null) { - setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject))); - } - } - } - } - catch (CoreException exception) { - TraceEditorPlugin.INSTANCE.log(exception); + List<?> targetObjects = markerHelper.getTargetObjects(editingDomain, marker); + if (!targetObjects.isEmpty()) { + setSelectionToViewer(targetObjects); } } @@ -1752,7 +1754,7 @@ public class TraceEditor getActionBarContributor().setActiveEditor(null); } - if (propertySheetPage != null) { + for (PropertySheetPage propertySheetPage : propertySheetPages) { propertySheetPage.dispose(); } diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/META-INF/MANIFEST.MF b/plugins/org.eclipse.m2m.atl.emftvm.trace/META-INF/MANIFEST.MF index 8d796325..9107271a 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/META-INF/MANIFEST.MF @@ -11,5 +11,5 @@ Export-Package: org.eclipse.m2m.atl.emftvm.trace, org.eclipse.m2m.atl.emftvm.trace.impl, org.eclipse.m2m.atl.emftvm.trace.util Require-Bundle: org.eclipse.core.runtime, - org.eclipse.emf.ecore;bundle-version="2.4.0";visibility:=reexport + org.eclipse.emf.ecore;visibility:=reexport;bundle-version="2.4.0" Bundle-ActivationPolicy: lazy diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/model/trace.ecore b/plugins/org.eclipse.m2m.atl.emftvm.trace/model/trace.ecore index ed0b16cf..cd743529 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/model/trace.ecore +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/model/trace.ecore @@ -78,6 +78,8 @@ eOpposite="#//TraceLinkSet/defaultSourceElements"/> <eStructuralFeatures xsi:type="ecore:EReference" name="uniqueFor" eType="#//TracedRule" eOpposite="#//TracedRule/uniqueSourceElements"/> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="mapsToSelf" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="TargetElement" eSuperTypes="#//TraceElement"> <eStructuralFeatures xsi:type="ecore:EReference" name="targetOf" eType="#//TraceLink" diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/model/trace.genmodel b/plugins/org.eclipse.m2m.atl.emftvm.trace/model/trace.genmodel index 6b7ab247..c36a7017 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/model/trace.genmodel +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/model/trace.genmodel @@ -59,12 +59,14 @@ <genClasses image="false" ecoreClass="trace.ecore#//TraceElement"> <genFeatures createChild="false" ecoreFeature="ecore:EAttribute trace.ecore#//TraceElement/name"/> <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference trace.ecore#//TraceElement/object"/> + <genFeatures createChild="false" ecoreFeature="ecore:EAttribute trace.ecore#//TraceElement/runtimeObject"/> </genClasses> <genClasses ecoreClass="trace.ecore#//SourceElement"> <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference trace.ecore#//SourceElement/sourceOf"/> <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference trace.ecore#//SourceElement/mapsTo"/> <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference trace.ecore#//SourceElement/defaultFor"/> <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference trace.ecore#//SourceElement/uniqueFor"/> + <genFeatures createChild="false" ecoreFeature="ecore:EAttribute trace.ecore#//SourceElement/mapsToSelf"/> </genClasses> <genClasses ecoreClass="trace.ecore#//TargetElement"> <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference trace.ecore#//TargetElement/targetOf"/> diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/SourceElement.java b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/SourceElement.java index 96682087..312e3ac3 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/SourceElement.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/SourceElement.java @@ -26,6 +26,7 @@ import org.eclipse.emf.common.util.EList; * <li>{@link org.eclipse.m2m.atl.emftvm.trace.SourceElement#getMapsTo <em>Maps To</em>}</li> * <li>{@link org.eclipse.m2m.atl.emftvm.trace.SourceElement#getDefaultFor <em>Default For</em>}</li> * <li>{@link org.eclipse.m2m.atl.emftvm.trace.SourceElement#getUniqueFor <em>Unique For</em>}</li> + * <li>{@link org.eclipse.m2m.atl.emftvm.trace.SourceElement#isMapsToSelf <em>Maps To Self</em>}</li> * </ul> * </p> * @@ -136,4 +137,30 @@ public interface SourceElement extends TraceElement { */ void setUniqueFor(TracedRule value); + /** + * Returns the value of the '<em><b>Maps To Self</b></em>' attribute. + * <!-- begin-user-doc --> + * <p> + * If the meaning of the '<em>Maps To Self</em>' attribute isn't clear, + * there really should be more of a description here... + * </p> + * <!-- end-user-doc --> + * @return the value of the '<em>Maps To Self</em>' attribute. + * @see #setMapsToSelf(boolean) + * @see org.eclipse.m2m.atl.emftvm.trace.TracePackage#getSourceElement_MapsToSelf() + * @model required="true" + * @generated + */ + boolean isMapsToSelf(); + + /** + * Sets the value of the '{@link org.eclipse.m2m.atl.emftvm.trace.SourceElement#isMapsToSelf <em>Maps To Self</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @param value the new value of the '<em>Maps To Self</em>' attribute. + * @see #isMapsToSelf() + * @generated + */ + void setMapsToSelf(boolean value); + } // SourceElement diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/TracePackage.java b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/TracePackage.java index 54cb6a27..3240bfd8 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/TracePackage.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/TracePackage.java @@ -350,13 +350,22 @@ public interface TracePackage extends EPackage { int SOURCE_ELEMENT__UNIQUE_FOR = TRACE_ELEMENT_FEATURE_COUNT + 3; /** + * The feature id for the '<em><b>Maps To Self</b></em>' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int SOURCE_ELEMENT__MAPS_TO_SELF = TRACE_ELEMENT_FEATURE_COUNT + 4; + + /** * The number of structural features of the '<em>Source Element</em>' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int SOURCE_ELEMENT_FEATURE_COUNT = TRACE_ELEMENT_FEATURE_COUNT + 4; + int SOURCE_ELEMENT_FEATURE_COUNT = TRACE_ELEMENT_FEATURE_COUNT + 5; /** * The meta object id for the '{@link org.eclipse.m2m.atl.emftvm.trace.impl.TargetElementImpl <em>Target Element</em>}' class. @@ -741,6 +750,17 @@ public interface TracePackage extends EPackage { EReference getSourceElement_UniqueFor(); /** + * Returns the meta object for the attribute '{@link org.eclipse.m2m.atl.emftvm.trace.SourceElement#isMapsToSelf <em>Maps To Self</em>}'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the attribute '<em>Maps To Self</em>'. + * @see org.eclipse.m2m.atl.emftvm.trace.SourceElement#isMapsToSelf() + * @see #getSourceElement() + * @generated + */ + EAttribute getSourceElement_MapsToSelf(); + + /** * Returns the meta object for class '{@link org.eclipse.m2m.atl.emftvm.trace.TargetElement <em>Target Element</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -1051,6 +1071,14 @@ public interface TracePackage extends EPackage { EReference SOURCE_ELEMENT__UNIQUE_FOR = eINSTANCE.getSourceElement_UniqueFor(); /** + * The meta object literal for the '<em><b>Maps To Self</b></em>' attribute feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EAttribute SOURCE_ELEMENT__MAPS_TO_SELF = eINSTANCE.getSourceElement_MapsToSelf(); + + /** * The meta object literal for the '{@link org.eclipse.m2m.atl.emftvm.trace.impl.TargetElementImpl <em>Target Element</em>}' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/SourceElementImpl.java b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/SourceElementImpl.java index b21f05b3..1b732a28 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/SourceElementImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/SourceElementImpl.java @@ -42,6 +42,7 @@ import org.eclipse.m2m.atl.emftvm.trace.TracedRule; * <li>{@link org.eclipse.m2m.atl.emftvm.trace.impl.SourceElementImpl#getMapsTo <em>Maps To</em>}</li> * <li>{@link org.eclipse.m2m.atl.emftvm.trace.impl.SourceElementImpl#getDefaultFor <em>Default For</em>}</li> * <li>{@link org.eclipse.m2m.atl.emftvm.trace.impl.SourceElementImpl#getUniqueFor <em>Unique For</em>}</li> + * <li>{@link org.eclipse.m2m.atl.emftvm.trace.impl.SourceElementImpl#isMapsToSelf <em>Maps To Self</em>}</li> * </ul> * </p> * @@ -80,6 +81,26 @@ public class SourceElementImpl extends TraceElementImpl implements SourceElement protected TracedRule uniqueFor; /** + * The default value of the '{@link #isMapsToSelf() <em>Maps To Self</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #isMapsToSelf() + * @generated + * @ordered + */ + protected static final boolean MAPS_TO_SELF_EDEFAULT = false; + + /** + * The cached value of the '{@link #isMapsToSelf() <em>Maps To Self</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #isMapsToSelf() + * @generated + * @ordered + */ + protected boolean mapsToSelf = MAPS_TO_SELF_EDEFAULT; + + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated @@ -105,7 +126,7 @@ public class SourceElementImpl extends TraceElementImpl implements SourceElement */ public TraceLink getSourceOf() { if (eContainerFeatureID() != TracePackage.SOURCE_ELEMENT__SOURCE_OF) return null; - return (TraceLink)eContainer(); + return (TraceLink)eInternalContainer(); } /** @@ -276,6 +297,27 @@ public class SourceElementImpl extends TraceElementImpl implements SourceElement * <!-- end-user-doc --> * @generated */ + public boolean isMapsToSelf() { + return mapsToSelf; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public void setMapsToSelf(boolean newMapsToSelf) { + boolean oldMapsToSelf = mapsToSelf; + mapsToSelf = newMapsToSelf; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, TracePackage.SOURCE_ELEMENT__MAPS_TO_SELF, oldMapsToSelf, mapsToSelf)); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ @SuppressWarnings("unchecked") @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { @@ -350,6 +392,8 @@ public class SourceElementImpl extends TraceElementImpl implements SourceElement case TracePackage.SOURCE_ELEMENT__UNIQUE_FOR: if (resolve) return getUniqueFor(); return basicGetUniqueFor(); + case TracePackage.SOURCE_ELEMENT__MAPS_TO_SELF: + return isMapsToSelf(); } return super.eGet(featureID, resolve, coreType); } @@ -376,6 +420,9 @@ public class SourceElementImpl extends TraceElementImpl implements SourceElement case TracePackage.SOURCE_ELEMENT__UNIQUE_FOR: setUniqueFor((TracedRule)newValue); return; + case TracePackage.SOURCE_ELEMENT__MAPS_TO_SELF: + setMapsToSelf((Boolean)newValue); + return; } super.eSet(featureID, newValue); } @@ -400,6 +447,9 @@ public class SourceElementImpl extends TraceElementImpl implements SourceElement case TracePackage.SOURCE_ELEMENT__UNIQUE_FOR: setUniqueFor((TracedRule)null); return; + case TracePackage.SOURCE_ELEMENT__MAPS_TO_SELF: + setMapsToSelf(MAPS_TO_SELF_EDEFAULT); + return; } super.eUnset(featureID); } @@ -420,6 +470,8 @@ public class SourceElementImpl extends TraceElementImpl implements SourceElement return defaultFor != null; case TracePackage.SOURCE_ELEMENT__UNIQUE_FOR: return uniqueFor != null; + case TracePackage.SOURCE_ELEMENT__MAPS_TO_SELF: + return mapsToSelf != MAPS_TO_SELF_EDEFAULT; } return super.eIsSet(featureID); } diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/SourceElementListImpl.java b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/SourceElementListImpl.java index 3cd377f7..31c0d2d5 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/SourceElementListImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/SourceElementListImpl.java @@ -100,7 +100,7 @@ public class SourceElementListImpl extends EObjectImpl implements SourceElementL */ public TraceLinkSet getDefaultFor() { if (eContainerFeatureID() != TracePackage.SOURCE_ELEMENT_LIST__DEFAULT_FOR) return null; - return (TraceLinkSet)eContainer(); + return (TraceLinkSet)eInternalContainer(); } /** @@ -141,7 +141,7 @@ public class SourceElementListImpl extends EObjectImpl implements SourceElementL */ public TracedRule getUniqueFor() { if (eContainerFeatureID() != TracePackage.SOURCE_ELEMENT_LIST__UNIQUE_FOR) return null; - return (TracedRule)eContainer(); + return (TracedRule)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TargetElementImpl.java b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TargetElementImpl.java index 19bb8ea6..a7cd87f3 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TargetElementImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TargetElementImpl.java @@ -80,7 +80,7 @@ public class TargetElementImpl extends TraceElementImpl implements TargetElement */ public TraceLink getTargetOf() { if (eContainerFeatureID() != TracePackage.TARGET_ELEMENT__TARGET_OF) return null; - return (TraceLink)eContainer(); + return (TraceLink)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TraceFactoryImpl.java b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TraceFactoryImpl.java index bd1f41b7..f79849f9 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TraceFactoryImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TraceFactoryImpl.java @@ -45,7 +45,7 @@ public class TraceFactoryImpl extends EFactoryImpl implements TraceFactory { */ public static TraceFactory init() { try { - TraceFactory theTraceFactory = (TraceFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.eclipse.org/m2m/atl/emftvm/2011/Trace"); + TraceFactory theTraceFactory = (TraceFactory)EPackage.Registry.INSTANCE.getEFactory(TracePackage.eNS_URI); if (theTraceFactory != null) { return theTraceFactory; } diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TraceLinkImpl.java b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TraceLinkImpl.java index d363b4af..4b14ae5c 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TraceLinkImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TraceLinkImpl.java @@ -126,7 +126,7 @@ public class TraceLinkImpl extends EObjectImpl implements TraceLink { */ public TracedRule getRule() { if (eContainerFeatureID() != TracePackage.TRACE_LINK__RULE) return null; - return (TracedRule)eContainer(); + return (TracedRule)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TracePackageImpl.java b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TracePackageImpl.java index 04f60214..a7006ad7 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TracePackageImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TracePackageImpl.java @@ -377,6 +377,15 @@ public class TracePackageImpl extends EPackageImpl implements TracePackage { * <!-- end-user-doc --> * @generated */ + public EAttribute getSourceElement_MapsToSelf() { + return (EAttribute)sourceElementEClass.getEStructuralFeatures().get(4); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ public EClass getTargetElement() { return targetElementEClass; } @@ -500,6 +509,7 @@ public class TracePackageImpl extends EPackageImpl implements TracePackage { createEReference(sourceElementEClass, SOURCE_ELEMENT__MAPS_TO); createEReference(sourceElementEClass, SOURCE_ELEMENT__DEFAULT_FOR); createEReference(sourceElementEClass, SOURCE_ELEMENT__UNIQUE_FOR); + createEAttribute(sourceElementEClass, SOURCE_ELEMENT__MAPS_TO_SELF); targetElementEClass = createEClass(TARGET_ELEMENT); createEReference(targetElementEClass, TARGET_ELEMENT__TARGET_OF); @@ -606,6 +616,7 @@ public class TracePackageImpl extends EPackageImpl implements TracePackage { initEReference(getSourceElement_MapsTo(), this.getTargetElement(), this.getTargetElement_MapsTo(), "mapsTo", null, 0, -1, SourceElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getSourceElement_DefaultFor(), this.getTraceLinkSet(), this.getTraceLinkSet_DefaultSourceElements(), "defaultFor", null, 0, 1, SourceElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getSourceElement_UniqueFor(), this.getTracedRule(), this.getTracedRule_UniqueSourceElements(), "uniqueFor", null, 0, 1, SourceElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getSourceElement_MapsToSelf(), ecorePackage.getEBoolean(), "mapsToSelf", null, 1, 1, SourceElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(targetElementEClass, TargetElement.class, "TargetElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getTargetElement_TargetOf(), this.getTraceLink(), this.getTraceLink_TargetElements(), "targetOf", null, 0, 1, TargetElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); diff --git a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TracedRuleImpl.java b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TracedRuleImpl.java index 802f95eb..182ed8c2 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TracedRuleImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm.trace/src/org/eclipse/m2m/atl/emftvm/trace/impl/TracedRuleImpl.java @@ -173,7 +173,7 @@ public class TracedRuleImpl extends EObjectImpl implements TracedRule { */ public TraceLinkSet getLinkSet() { if (eContainerFeatureID() != TracePackage.TRACED_RULE__LINK_SET) return null; - return (TraceLinkSet)eContainer(); + return (TraceLinkSet)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm/META-INF/MANIFEST.MF b/plugins/org.eclipse.m2m.atl.emftvm/META-INF/MANIFEST.MF index 03aedff1..54293a2d 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.m2m.atl.emftvm/META-INF/MANIFEST.MF @@ -14,7 +14,7 @@ Export-Package: org.eclipse.m2m.atl.emftvm, org.eclipse.m2m.atl.emftvm.impl.resource, org.eclipse.m2m.atl.emftvm.util Require-Bundle: org.eclipse.core.runtime, - org.eclipse.emf.ecore;bundle-version="2.4.0";visibility:=reexport, + org.eclipse.emf.ecore;visibility:=reexport;bundle-version="2.4.0", org.eclipse.emf.ecore.xmi;bundle-version="2.4.0", org.eclipse.m2m.atl.emftvm.trace;visibility:=reexport, org.eclipse.m2m.atl.common;bundle-version="3.1.0", diff --git a/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.html b/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.html index 8bd9f90a..efdbf38e 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.html +++ b/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.html @@ -1,7 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html - PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xml:lang="en-US">EMFTVM format specification</title><meta name="DCTERMS.title" content="EMFTVM format specification" xml:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.creator" content="Dennis Wagelaar"/><meta name="DCTERMS.issued" content="2011-01-12T11:02:40" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.contributor" content="Dennis Wagelaar"/><meta name="DCTERMS.modified" content="2012-02-25T21:40:09" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.provenance" content="" xml:lang="en-US"/><meta name="DCTERMS.subject" content="," xml:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><base href="."/><style type="text/css"> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xml:lang="en-US">EMFTVM format specification</title><meta name="DCTERMS.title" content="EMFTVM format specification" xml:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.creator" content="Dennis Wagelaar"/><meta name="DCTERMS.issued" content="2011-01-12T11:02:40" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.contributor" content="Dennis Wagelaar"/><meta name="DCTERMS.modified" content="2013-07-19T21:33:07" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.provenance" content="" xml:lang="en-US"/><meta name="DCTERMS.subject" content="," xml:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css"> @page { } table { border-collapse:collapse; border-spacing:0; empty-cells:show } td, th { vertical-align:top; font-size:10pt;} @@ -17,31 +15,31 @@ .ta4 { writing-mode:lr-tb; } .ta5 { writing-mode:lr-tb; } .Default { font-family:Arial; } - .ce1 { font-family:Arial; border-width:0.0133cm; border-style:solid; border-color:#000000; font-weight:bold; } - .ce10 { font-family:Arial; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:bold; } - .ce11 { font-family:Arial; border-width:0.0133cm; border-style:solid; border-color:#000000; font-size:10pt; font-style:italic; text-shadow:none; text-decoration:none ! important; font-weight:bold; } - .ce15 { font-family:Arial; border-width:0.0133cm; border-style:solid; border-color:#000000; } - .ce16 { font-family:Arial; background-color:#c0c0c0; border-width:0.0133cm; border-style:solid; border-color:#000000; } - .ce17 { font-family:Arial; background-color:#c0c0c0; border-width:0.0133cm; border-style:solid; border-color:#000000; } - .ce18 { font-family:Arial; background-color:transparent; border-width:0.0133cm; border-style:solid; border-color:#000000; } - .ce19 { font-family:Arial; background-color:transparent; border-width:0.0133cm; border-style:solid; border-color:#000000; } - .ce2 { font-family:Arial; border-width:0.0133cm; border-style:solid; border-color:#000000; } - .ce20 { font-family:Arial; } - .ce21 { font-family:Arial; border-bottom-width:0.0133cm; border-bottom-style:solid; border-bottom-color:#000000; background-color:#c0c0c0; border-left-width:0.0133cm; border-left-style:solid; border-left-color:#000000; border-right-style:none; border-top-width:0.0133cm; border-top-style:solid; border-top-color:#000000; } - .ce22 { font-family:Arial; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:bold; } - .ce23 { font-family:Arial; border-bottom-width:0.0133cm; border-bottom-style:solid; border-bottom-color:#000000; background-color:#c0c0c0; border-left-style:none; border-right-style:none; border-top-width:0.0133cm; border-top-style:solid; border-top-color:#000000; font-style:italic; } - .ce24 { font-family:Arial; border-width:0.0133cm; border-style:solid; border-color:#000000; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; font-size:10pt; font-style:italic; text-shadow:none; text-decoration:none ! important; font-weight:bold; } - .ce25 { font-family:Arial; border-bottom-width:0.0133cm; border-bottom-style:solid; border-bottom-color:#000000; background-color:#c0c0c0; border-left-style:none; border-right-style:none; border-top-width:0.0133cm; border-top-style:solid; border-top-color:#000000; } - .ce26 { font-family:Arial; background-color:#c0c0c0; } - .ce27 { font-family:Arial; border-bottom-width:0.0133cm; border-bottom-style:solid; border-bottom-color:#000000; background-color:#c0c0c0; border-left-style:none; border-right-width:0.0133cm; border-right-style:solid; border-right-color:#000000; border-top-width:0.0133cm; border-top-style:solid; border-top-color:#000000; } - .ce28 { font-family:Arial; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; } - .ce29 { font-family:Arial; border-width:0.0133cm; border-style:solid; border-color:#000000; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; } - .ce30 { font-family:Arial; border-width:0.0133cm; border-style:solid; border-color:#000000; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:normal; } - .ce31 { font-family:Arial; font-weight:bold; } - .ce35 { font-family:Arial; border-width:0.0133cm; border-style:solid; border-color:#000000; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; font-size:10pt; font-style:italic; text-shadow:none; text-decoration:none ! important; font-weight:normal; } - .ce36 { font-family:Arial; border-width:0.0133cm; border-style:solid; border-color:#000000; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; color:#0000ff; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:normal; } - .ce37 { font-family:Arial; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; font-size:10pt; font-style:italic; text-shadow:none; text-decoration:none ! important; font-weight:normal; } - .ce38 { font-family:Arial; border-width:0.0133cm; border-style:solid; border-color:#000000; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:normal; } + .ce47 { font-family:Arial; border-width:0,0021cm; border-style:solid; border-color:#000000; font-weight:bold; } + .ce48 { font-family:Arial; border-width:0,0021cm; border-style:solid; border-color:#000000; } + .ce49 { font-family:Arial; border-width:0,0021cm; border-style:solid; border-color:#000000; } + .ce50 { font-family:Arial; background-color:#c0c0c0; border-width:0,0021cm; border-style:solid; border-color:#000000; } + .ce51 { font-family:Arial; background-color:#c0c0c0; border-width:0,0021cm; border-style:solid; border-color:#000000; } + .ce52 { font-family:Arial; background-color:transparent; border-width:0,0021cm; border-style:solid; border-color:#000000; } + .ce53 { font-family:Arial; background-color:transparent; border-width:0,0021cm; border-style:solid; border-color:#000000; } + .ce54 { font-family:Arial; } + .ce55 { font-family:Arial; border-bottom-width:0,0021cm; border-bottom-style:solid; border-bottom-color:#000000; background-color:#c0c0c0; border-left-width:0,0021cm; border-left-style:solid; border-left-color:#000000; border-right-style:none; border-top-width:0,0021cm; border-top-style:solid; border-top-color:#000000; } + .ce56 { font-family:Arial; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:bold; } + .ce57 { font-family:Arial; border-width:0,0021cm; border-style:solid; border-color:#000000; font-size:10pt; font-style:italic; text-shadow:none; text-decoration:none ! important; font-weight:bold; } + .ce58 { font-family:Arial; border-bottom-width:0,0021cm; border-bottom-style:solid; border-bottom-color:#000000; background-color:#c0c0c0; border-left-style:none; border-right-style:none; border-top-width:0,0021cm; border-top-style:solid; border-top-color:#000000; font-style:italic; } + .ce59 { font-family:Arial; border-bottom-width:0,0021cm; border-bottom-style:solid; border-bottom-color:#000000; background-color:#c0c0c0; border-left-style:none; border-right-style:none; border-top-width:0,0021cm; border-top-style:solid; border-top-color:#000000; } + .ce60 { font-family:Arial; background-color:#c0c0c0; } + .ce61 { font-family:Arial; border-bottom-width:0,0021cm; border-bottom-style:solid; border-bottom-color:#000000; background-color:#c0c0c0; border-left-style:none; border-right-width:0,0021cm; border-right-style:solid; border-right-color:#000000; border-top-width:0,0021cm; border-top-style:solid; border-top-color:#000000; } + .ce62 { font-family:Arial; font-weight:bold; } + .ce63 { font-family:Arial; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:bold; } + .ce64 { font-family:Arial; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; } + .ce65 { font-family:Arial; border-width:0,0021cm; border-style:solid; border-color:#000000; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; font-size:10pt; font-style:italic; text-shadow:none; text-decoration:none ! important; font-weight:bold; } + .ce66 { font-family:Arial; border-width:0,0021cm; border-style:solid; border-color:#000000; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; } + .ce67 { font-family:Arial; border-width:0,0021cm; border-style:solid; border-color:#000000; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:normal; } + .ce68 { font-family:Arial; border-width:0,0021cm; border-style:solid; border-color:#000000; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; font-size:10pt; font-style:italic; text-shadow:none; text-decoration:none ! important; font-weight:normal; } + .ce69 { font-family:Arial; border-width:0,0021cm; border-style:solid; border-color:#000000; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; color:#0000ff; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:normal; } + .ce70 { font-family:Arial; vertical-align:top; text-align:left ! important; margin-left:0cm; writing-mode:page; font-size:10pt; font-style:italic; text-shadow:none; text-decoration:none ! important; font-weight:normal; } + .ce71 { font-family:Arial; border-width:0,0021cm; border-style:solid; border-color:#000000; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:normal; } .co10 { width:2.542cm; } .co11 { width:3.595cm; } .co12 { width:15.307cm; } @@ -57,7 +55,9 @@ .ro3 { height:0.459cm; } .ro4 { height:0.427cm; } .ro5 { height:0.436cm; } + .ro7 { height:0.452cm; } .T1 { color:#0000ff; font-family:Arial; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:normal; } + .T2 { font-family:Arial; font-size:10pt; font-style:normal; text-shadow:none; text-decoration:none ! important; font-weight:normal; } <!-- ODF styles with no properties representable as CSS --> { } - </style></head><body dir="ltr" style="max-width:29.699cm;margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; "><table border="0" cellspacing="0" cellpadding="0" class="ta5"><colgroup><col width="31"/><col width="152"/><col width="111"/><col width="157"/><col width="669"/><col width="99"/></colgroup><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="Default"> </td><td style="text-align:left;width:3.468cm; " class="ce10"><p>EMF TVM opcode list</p></td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="Default"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce1"><p>#</p></td><td style="text-align:left;width:3.468cm; " class="ce11"><p>Opcode</p></td><td style="text-align:left;width:2.542cm; " class="ce11"><p>Arguments</p></td><td style="text-align:left;width:3.595cm; " class="ce11"><p>Stack</p></td><td style="text-align:left;width:15.307cm; " class="ce11"><p>Comment</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce2"><p>0</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>PUSH</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: value ref</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Push constant literal onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>1</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>PUSHT</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Push TRUE literal onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>2</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>PUSHF</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Push FALSE literal onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>3</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>POP</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Pops top value from stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>4</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>LOAD</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: cb offset</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Loads local variable value onto stack, given the parent code block offset (0 = this code block)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"><p>2: varIndex</p></td><td style="text-align:left;width:3.595cm; " class="ce2"> </td><td style="text-align:left;width:15.307cm; " class="ce2"><p>(varIndex = index of local variable in the local variable table)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>5</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>STORE</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: cb offset</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Stores top stack value into local variable (and pops), given the parent code block offset</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"><p>2: varIndex</p></td><td style="text-align:left;width:3.595cm; " class="ce2"> </td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>6</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>SET</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Set object property value</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"> </td><td style="text-align:left;width:3.595cm; " class="ce2"><p>1: value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>7</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>GET</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Get object property value onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>8</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>GET_TRANS</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Get object property transitive closure value onto stack (always a collection)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>9</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>SET_STATIC</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: fieldname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: type</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Set static field value</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"> </td><td style="text-align:left;width:3.595cm; " class="ce2"><p>1: value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>10</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>GET_STATIC</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: fieldname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: type</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Get static field value onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>11</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>FINDTYPE</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: modelname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Find type or metaclass in metamodel</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"><p>2: typename</p></td><td style="text-align:left;width:3.595cm; " class="ce2"> </td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce16"><p>12</p></td><td style="text-align:left;width:3.468cm; " class="ce17"><p>FINDTYPE_S</p></td><td style="text-align:left;width:2.542cm; " class="ce17"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce17"><p>0: modelname</p></td><td style="text-align:left;width:15.307cm; " class="ce17"><p>Find type or metaclass in metamodel given on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"> </td><td style="text-align:left;width:3.595cm; " class="ce2"><p>1: typename</p></td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>13</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>NEW</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: modelname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: type</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Creates a new model element, given an output model name</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce16"><p>14</p></td><td style="text-align:left;width:3.468cm; " class="ce17"><p>NEW_S</p></td><td style="text-align:left;width:2.542cm; " class="ce17"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce17"><p>0: modelname</p></td><td style="text-align:left;width:15.307cm; " class="ce17"><p>Creates a new model element, given an output model name on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce17"> </td><td style="text-align:left;width:3.468cm; " class="ce17"> </td><td style="text-align:left;width:2.542cm; " class="ce17"> </td><td style="text-align:left;width:3.595cm; " class="ce17"><p>1: type</p></td><td style="text-align:left;width:15.307cm; " class="ce17"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>15</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>DELETE</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Deletes the object on the stack from its model</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>16</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>DUP</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Duplicates stack top value</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>17</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>DUP_X1</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Pops top two values from stack, pushes top value, then pushes original two values back</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>18</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>SWAP</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Swaps top two values on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>19</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>SWAP_X1</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Swaps third value over top two values on the stack (abc... → cab...)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce18"><p>20</p></td><td style="text-align:left;width:3.468cm; " class="ce19"><p>IF</p></td><td style="text-align:left;width:2.542cm; " class="ce19"><p>1: target offset</p></td><td style="text-align:left;width:3.595cm; " class="ce19"><p>0: boolean value</p></td><td style="text-align:left;width:15.307cm; " class="ce19"><p>If stack top value is true, branch to target offset</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce18"><p>21</p></td><td style="text-align:left;width:3.468cm; " class="ce19"><p>IFN</p></td><td style="text-align:left;width:2.542cm; " class="ce19"><p>1: target offset</p></td><td style="text-align:left;width:3.595cm; " class="ce19"><p>0: boolean value</p></td><td style="text-align:left;width:15.307cm; " class="ce19"><p>If stack top value is false, branch to target offset</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce18"><p>22</p></td><td style="text-align:left;width:3.468cm; " class="ce19"><p>GOTO</p></td><td style="text-align:left;width:2.542cm; " class="ce19"><p>1: target offset</p></td><td style="text-align:left;width:3.595cm; " class="ce19"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce19"><p>Branch to target offset</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce18"><p>23</p></td><td style="text-align:left;width:3.468cm; " class="ce19"><p>ITERATE</p></td><td style="text-align:left;width:2.542cm; " class="ce19"><p>1: target offset</p></td><td style="text-align:left;width:3.595cm; " class="ce19"><p>0: collection value</p></td><td style="text-align:left;width:15.307cm; " class="ce19"><p>Runs the following instructions up to ENDITERATE for each element in the collection;</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce18"> </td><td style="text-align:left;width:3.468cm; " class="ce19"> </td><td style="text-align:left;width:2.542cm; " class="ce19"> </td><td style="text-align:left;width:3.595cm; " class="ce19"> </td><td style="text-align:left;width:15.307cm; " class="ce19"><p>offset marks the matching ENDITERATE</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce18"><p>24</p></td><td style="text-align:left;width:3.468cm; " class="ce19"><p>ENDITERATE</p></td><td style="text-align:left;width:2.542cm; " class="ce19"><p>1: target offset</p></td><td style="text-align:left;width:3.595cm; " class="ce19"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce19"><p>Marks the end of an ITERATE run of instructions; offset marks the matching ITERATE</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>25</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>INVOKE</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: opname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Regular dynamic method invocation, based on runtime type information</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"><p>2: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce2"> </td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>26</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>INVOKE_SUPER</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: opname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Dynamic method invocation of superclass, relative to current execution context</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"><p>2: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce2"> </td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce15"><p>27</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>INVOKE_STATIC</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: opname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Static method invocation; first argument is a metaclass, or Java class for native static operations</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"><p>2: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce2"> </td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce16"><p>28</p></td><td style="text-align:left;width:3.468cm; " class="ce17"><p>ALLINST</p></td><td style="text-align:left;width:2.542cm; " class="ce17"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce17"><p>0: type</p></td><td style="text-align:left;width:15.307cm; " class="ce17"><p>Finds all instances of the given type in all input models</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce16"><p>29</p></td><td style="text-align:left;width:3.468cm; " class="ce17"><p>ALLINST_IN</p></td><td style="text-align:left;width:2.542cm; " class="ce17"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce17"><p>0: type</p></td><td style="text-align:left;width:15.307cm; " class="ce17"><p>Finds all instances of the given type in given input model</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:left;width:0.707cm; " class="ce17"> </td><td style="text-align:left;width:3.468cm; " class="ce17"> </td><td style="text-align:left;width:2.542cm; " class="ce17"> </td><td style="text-align:left;width:3.595cm; " class="ce17"><p>1: modelname</p></td><td style="text-align:left;width:15.307cm; " class="ce17"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>30</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>ISNULL</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Pushes TRUE if value is null, FALSE otherwise</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce15"><p>31</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>GETENVTYPE</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Pushes the ExecEnv type on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>32</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>NOT</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: boolean value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Pushes TRUE if value is FALSE, FALSE otherwise</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce15"><p>33</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>AND</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: code block #</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: first value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Pushes the boolean AND result of the first value and the result of codeblock on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce15"><p>34</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>OR</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: code block #</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: first value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Pushes the boolean OR result of the first value and the result of codeblock on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>35</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>XOR</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: first value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Pushes the boolean XOR result on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce15"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"> </td><td style="text-align:left;width:3.595cm; " class="ce2"><p>1: second value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce15"><p>36</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>IMPLIES</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: code block #</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: first value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Pushes the boolean IMPLIES result of the first value and the result of codeblock on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce15"><p>37</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>IFTE</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: then cb #</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: boolean value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Executes “then” if TRUE, “else” otherwise</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"><p>2: else cb #</p></td><td style="text-align:left;width:3.595cm; " class="ce2"> </td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce18"><p>38</p></td><td style="text-align:left;width:3.468cm; " class="ce19"><p>RETURN</p></td><td style="text-align:left;width:2.542cm; " class="ce19"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce19"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce19"><p>Returns from a code block</p></td><td style="text-align:left;width:2.267cm; " class="ce31"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>39</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>GETCB</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: code block #</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Pushes nested code block onto the stack (lambda expression)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce15"><p>40</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>INVOKE_ALL_CBS</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Invokes all nested code blocks and pushes results on the stack</p></td><td style="text-align:left;width:2.267cm; " class="ce31"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce15"><p>41</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>INVOKE_CB</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: code block #</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Invokes nested code block (lambda expression)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"><p>2: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce2"> </td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce18"><p>42</p></td><td style="text-align:left;width:3.468cm; " class="ce19"><p>INVOKE_CB_S</p></td><td style="text-align:left;width:2.542cm; " class="ce19"><p>1: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce19"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce19"><p>Invokes code block on stack (lambda expression)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce19"> </td><td style="text-align:left;width:3.468cm; " class="ce19"> </td><td style="text-align:left;width:2.542cm; " class="ce19"> </td><td style="text-align:left;width:3.595cm; " class="Default"><p>n+1: code block</p></td><td style="text-align:left;width:15.307cm; " class="ce19"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce16"><p>43</p></td><td style="text-align:left;width:3.468cm; " class="ce17"><p>MATCH</p></td><td style="text-align:left;width:2.542cm; " class="ce17"><p>1: rulename</p></td><td style="text-align:left;width:3.595cm; " class="ce17"><p>0..n: input elements</p></td><td style="text-align:left;width:15.307cm; " class="ce17"><p>Matches the given rule, and invokes the pre-apply code for each match</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:left;width:0.707cm; " class="ce16"> </td><td style="text-align:left;width:3.468cm; " class="ce17"> </td><td style="text-align:left;width:2.542cm; " class="ce17"><p>2: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce17"> </td><td style="text-align:left;width:15.307cm; " class="ce17"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce16"><p>44</p></td><td style="text-align:left;width:3.468cm; " class="ce17"><p>MATCH_S</p></td><td style="text-align:left;width:2.542cm; " class="ce17"><p>1: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce17"><p>0..n: input elements</p></td><td style="text-align:left;width:15.307cm; " class="ce17"><p>Matches the rule on the stack, and invokes the pre-apply code for each match</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce16"> </td><td style="text-align:left;width:3.468cm; " class="ce17"> </td><td style="text-align:left;width:2.542cm; " class="ce17"> </td><td style="text-align:left;width:3.595cm; " class="ce26"><p>n+1: rule</p></td><td style="text-align:left;width:15.307cm; " class="ce17"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce15"><p>45</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>ADD</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Adds object property value</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"> </td><td style="text-align:left;width:3.595cm; " class="ce2"><p>1: value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce15"><p>46</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>REMOVE</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Removes object property value</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"> </td><td style="text-align:left;width:3.595cm; " class="ce2"><p>1: value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce15"><p>47</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>INSERT</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Adds object property value at the given index (starting at 0)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"> </td><td style="text-align:left;width:3.595cm; " class="ce2"><p>1: value</p></td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce2"> </td><td style="text-align:left;width:3.468cm; " class="ce2"> </td><td style="text-align:left;width:2.542cm; " class="ce2"> </td><td style="text-align:left;width:3.595cm; " class="ce2"><p>2: index</p></td><td style="text-align:left;width:15.307cm; " class="ce2"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce2"><p>48</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>GET_SUPER</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Get object property value of superclass onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce2"><p>49</p></td><td style="text-align:left;width:3.468cm; " class="ce2"><p>GETENV</p></td><td style="text-align:left;width:2.542cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce2"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce2"><p>Pushes the ExecEnv instance on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce20"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce21"> </td><td style="text-align:left;width:3.468cm; " class="ce23"><p>Instructions marked in grey are not (yet) used by any compiler for EMFTVM</p></td><td style="text-align:left;width:2.542cm; " class="ce25"> </td><td style="text-align:left;width:3.595cm; " class="ce25"> </td><td style="text-align:left;width:15.307cm; " class="ce27"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce20"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce20"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce20"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce20"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr></table><table border="0" cellspacing="0" cellpadding="0" class="ta4"><colgroup><col width="174"/><col width="288"/><col width="99"/><col width="561"/></colgroup><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>EMF TVM file format</p></td><td style="text-align:left;width:6.592cm; " class="ce22"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Magic</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>“ETVM” in ASCII</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Cpcount</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Constant pool count = number of entries in the constant pool</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Constant pool</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>8</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>cpsize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Constant pool table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Module name</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>8+cpsize</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Reference to module name string in constant pool</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Source name</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>12+cpsize</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Reference to source file name in constant pool</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Input model count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>16+cpsize</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of input models</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Input model table</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>20+cpsize</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>isz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Table of model declarations (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Inout model count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>20+cpsize+isz</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of input/output models</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Inout model table</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>24+cpsize+isz</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>iosz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Table of model declarations (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Output model count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>24+cpsize+isz+iosz</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of output models</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Output model table</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>28+cpsize+isz+iosz</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>osz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Table of model declarations (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Import count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>28+cpsize+isz+iosz+osz</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of imported modules</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Imports table</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>32+cpsize+isz+iosz+osz</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>itsize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>List of name references of imported modules</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Feature count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>32+cpsize+isz+iosz+osz+itsize</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of features (fields, operations)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Feature table</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>36+cpsize+isz+iosz+osz+itsize</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>fsize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Feature table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Rule count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>36+cpsize+isz+iosz+osz+itsize+fsize</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of transformation rules</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Rule table</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>40+cpsize+isz+iosz+osz+itsize+fsize</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>rtsize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Rule table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>Constant pool</p></td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Tag</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Constant type tag</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Value</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>vsize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Constant value (size depends on tag)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Tag</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Size</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce24"><p>Description</p></td></tr><tr class="ro5"><td style="text-align:right; width:3.976cm; " class="ce29"><p>0</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>stringsize</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce36"><p><span class="T1"><a href="http://download.oracle.com/javase/6/docs/api/java/io/DataInput.html#modified-utf-8">String in modified UTF-8: http://download.oracle.com/javase/6/docs/api/java/io/DataInput.html#modified-utf-8</a></span></p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>1</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce29"><p>Integer (see DataInputStream.readInt())</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>2</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>8</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce29"><p>Double (see DataInputStream.readDouble())</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>3</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>1</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce29"><p>Byte</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>4</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>1</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce29"><p>Char</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>5</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce29"><p>Float</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>6</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>2</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce29"><p>Short</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>7</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>8</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce29"><p>Long</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>8</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>stringsize</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce29"><p>Enumeration literal encoded as a modified UTF-8 string</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>9</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>0</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce29"><p>Null</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>Model declaration table</p></td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Model name</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Metamodel name</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Metamodel name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>Feature table</p></td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Tag</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Feature type tag</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Feature description</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>fsize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Feature (format depends on tag)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce37"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Tag</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Description</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce24"><p>Format</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>0</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>Field</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce30"><p>See field entry</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>1</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>StaticField</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce30"><p>See field entry</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>2</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>Operation</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce30"><p>See operation entry</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>3</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>StaticOperation</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce30"><p>See operation entry</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>QueryOperation</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce30"><p>See operation entry</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>5</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>StaticQueryOperation</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce30"><p>See operation entry</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>Field entry</p></td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Field name</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Field name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Field type</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Field type name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Field type model</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Field type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Field context</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Field context type reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Field context model</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Field context type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Initialiser code block</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>20</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>csize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Initialisation code block (see code block)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="Default"> </td><td style="text-align:left;width:6.592cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>Operation entry</p></td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Operation name</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Operation name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Return type</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Operation return type reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Return type model</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Operation return type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Operation context</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Operation context type reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Operation context model</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Operation context type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Parameter count</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>20</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of parameters</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Parameter table</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>24</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>ptsize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Parameter table (see static field table)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Code block</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>24+ptsize</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>csize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Code block (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="Default"> </td><td style="text-align:left;width:6.592cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>Code block</p></td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce30"><p>Max. locals</p></td><td style="text-align:right; width:6.592cm; " class="ce30"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce38"><p>Maximum number of local variables (-1 if unknown)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce30"><p>Max. stack size</p></td><td style="text-align:right; width:6.592cm; " class="ce30"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce38"><p>Maximum number of stack elements (-1 if unknown)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Local variable count</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of local variables</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Local variable table</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>12</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>lvsize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Local variable table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Line number count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>12+lvsize</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of line number table entries</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Line number table</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>16+lvsize</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>lnsize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Line number table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Nested code block count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>16+lvsize+lnsize</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of nested code blocks</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Nested code blocks</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>20+lvsize+lnsize</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>nsize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Nested code blocks</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Instruction count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>20+lvsize+lnsize+nsize</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of instructions</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Instruction list</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>24+lvsize_lnsize+nsize</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>isize</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>List of instructions (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce37"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>Instruction list</p></td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce30"><p>Line number index</p></td><td style="text-align:right; width:6.592cm; " class="ce30"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce38"><p>Line number table index, or -1 if no line number available</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Opcode</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Instruction (see opcode reference)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Parameter 1</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>First parameter (depends on instruction)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Parameter 2</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Second parameter (depends on instruction)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>…</p></td><td style="text-align:left;width:6.592cm; " class="ce29"> </td><td style="text-align:left;width:2.267cm; " class="ce29"> </td><td style="text-align:left;width:12.829cm; " class="ce2"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>Line number table</p></td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce30"><p>Start line</p></td><td style="text-align:right; width:6.592cm; " class="ce30"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce38"><p>Start line number</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce30"><p>Start column</p></td><td style="text-align:right; width:6.592cm; " class="ce30"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce38"><p>Start column number</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce30"><p>End line</p></td><td style="text-align:right; width:6.592cm; " class="ce30"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce38"><p>End line number</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce30"><p>End column</p></td><td style="text-align:right; width:6.592cm; " class="ce30"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce38"><p>End column number</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce30"><p>Start character</p></td><td style="text-align:right; width:6.592cm; " class="ce30"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce38"><p>Start character in the source file stream</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce30"><p>End character</p></td><td style="text-align:right; width:6.592cm; " class="ce30"><p>20</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce38"><p>End character in the source file stream</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>Local variable table</p></td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Slot</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Variable slot number (starting at 0)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Name</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Variable name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Type</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Type name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Start instruction</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Start instruction offset</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>End instruction</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>End instruction offset</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce10"><p>Rule table</p></td><td style="text-align:left;width:6.592cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="Default"> </td><td style="text-align:left;width:6.592cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Rule name</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Rule name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Rule mode</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Rule mode code (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Abstract</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Whether the rule is abstract (1 or 0)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Trace mode</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Trace mode bitset (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>DistinctElements</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Whether the rule matches distinct input elements (1 or 0)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Input element count</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>20</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of input model elements</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Input element table</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>24</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>iesz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Input model element table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Output element count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>24+iesz</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of output model elements</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Output element table</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>28+iesz</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>oesz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Output model element table (see output element table)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Super-rule count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>28+iesz+oesz</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of super-rules</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Super-rule table</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>32+iesz+oesz</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>srsz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Super-rule table (list of super-rule name references)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Rule field count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>32+iesz+oesz+srsz</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of rule fields</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Rule field table</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>36+iesz+oesz+srsz</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>fsz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Rule field table (see feature table)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Matcher count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>36+iesz+oesz+srsz+fsz</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of matcher code blocks to follow (0 or 1)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Matcher code block</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>40+iesz+oesz+srsz+fsz</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>msz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Matcher code block (see code block)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Applier count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>40+iesz+oesz+srsz+fsz+msz</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of applier code blocks to follow (0 or 1)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Applier code block</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>44+iesz+oesz+srsz+fsz+msz</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>asz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Applier code block (see code block)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Post-apply count</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>44+iesz+oesz+srsz+fsz+msz+asz</p></td><td style="text-align:right; width:2.267cm; " class="ce30"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of post-apply code blocks to follow (0 or 1)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Post-apply code block</p></td><td style="text-align:left;width:6.592cm; " class="ce29"><p>48+iesz+oesz+srsz+fsz+msz+asz</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>psz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Post-apply code block (see code block)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Rule mode</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce24"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>0</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce29"><p>Manual application</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>1</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce29"><p>Automatic single application</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>2</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce29"><p>Automatic recursive application (priority given by rule order of appearance)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Trace mode</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce24"><p>Comment (any combination of the bit values below can occur)</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>0</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce29"><p>Standard trace</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>1</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce29"><p>Default trace</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce29"><p>2</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce29"><p>Unique trace</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>Input element table</p></td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Element name</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Input element name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Element type</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Input element type reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Element type model</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Input element type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Element model count</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Number of input element models</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Element models</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>16</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>iemsz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Input element model name references</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce22"><p>Output element table</p></td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce24"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce24"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce11"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Element name</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Element name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Element type</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Element type reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Element type model</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Element type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Element model</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Element model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Maps to element count</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce29"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Source element mapping count</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce29"><p>Maps to elements</p></td><td style="text-align:right; width:6.592cm; " class="ce29"><p>20</p></td><td style="text-align:left;width:2.267cm; " class="ce35"><p>mtsz</p></td><td style="text-align:left;width:12.829cm; " class="ce2"><p>Source element mapping name references</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce28"> </td><td style="text-align:left;width:6.592cm; " class="ce28"> </td><td style="text-align:left;width:2.267cm; " class="ce28"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr></table><table border="0" cellspacing="0" cellpadding="0" class="ta3"><colgroup><col width="93"/><col width="344"/></colgroup><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce22"><p>EMF TVM native types</p></td><td style="text-align:left;width:7.869cm; " class="Default"> </td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="Default"> </td><td style="text-align:left;width:7.869cm; " class="Default"> </td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce24"><p>Name</p></td><td style="text-align:left;width:7.869cm; " class="ce24"><p>Java class</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce2"><p>Object</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>java.lang.Object</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce2"><p>Collection</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>org.eclipse.m2m.atl.emftvm.util.LazyCollection</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce2"><p>Bag</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>org.eclipse.m2m.atl.emftvm.util.LazyBag</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce2"><p>Sequence</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>org.eclipse.m2m.atl.emftvm.util.LazyList</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce2"><p>Set</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>org.eclipse.m2m.atl.emftvm.util.LazySet</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce2"><p>OrderedSet</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>org.eclipse.m2m.atl.emftvm.util.LazyOrderedSet</p></td></tr><tr class="ro3"><td style="text-align:left;width:2.122cm; " class="ce2"><p>Map</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>java.util.Map</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce2"><p>Tuple</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>org.eclipse.m2m.atl.emftvm.util.Tuple</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce2"><p>Boolean</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>java.lang.Boolean</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce2"><p>Integer</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>java.lang.Integer</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce2"><p>Real</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>java.lang.Double</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce2"><p>String</p></td><td style="text-align:left;width:7.869cm; " class="ce2"><p>java.lang.String</p></td></tr></table></body></html>
\ No newline at end of file + </style></head><body dir="ltr" style="max-width:29.699cm;margin:2cm; margin-top:2cm; margin-bottom:2cm; margin-left:2cm; margin-right:2cm; writing-mode:lr-tb; "><table border="0" cellspacing="0" cellpadding="0" class="ta5"><colgroup><col width="31"/><col width="152"/><col width="111"/><col width="157"/><col width="669"/><col width="99"/></colgroup><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="Default"> </td><td style="text-align:left;width:3.468cm; " class="ce56"><p>EMF TVM opcode list</p></td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="Default"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce47"><p>#</p></td><td style="text-align:left;width:3.468cm; " class="ce57"><p>Opcode</p></td><td style="text-align:left;width:2.542cm; " class="ce57"><p>Arguments</p></td><td style="text-align:left;width:3.595cm; " class="ce57"><p>Stack</p></td><td style="text-align:left;width:15.307cm; " class="ce57"><p>Comment</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce48"><p>0</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>PUSH</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: value ref</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Push constant literal onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>1</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>PUSHT</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Push TRUE literal onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>2</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>PUSHF</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Push FALSE literal onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>3</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>POP</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Pops top value from stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>4</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>LOAD</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: cb offset</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Loads local variable value onto stack, given the parent code block offset (0 = this code block)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"><p>2: varIndex</p></td><td style="text-align:left;width:3.595cm; " class="ce48"> </td><td style="text-align:left;width:15.307cm; " class="ce48"><p>(varIndex = index of local variable in the local variable table)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>5</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>STORE</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: cb offset</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Stores top stack value into local variable (and pops), given the parent code block offset</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"><p>2: varIndex</p></td><td style="text-align:left;width:3.595cm; " class="ce48"> </td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>6</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>SET</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Set object property value</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"> </td><td style="text-align:left;width:3.595cm; " class="ce48"><p>1: value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>7</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>GET</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Get object property value onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>8</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>GET_TRANS</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Get object property transitive closure value onto stack (always a collection)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>9</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>SET_STATIC</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: fieldname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: type</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Set static field value</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"> </td><td style="text-align:left;width:3.595cm; " class="ce48"><p>1: value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>10</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>GET_STATIC</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: fieldname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: type</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Get static field value onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>11</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>FINDTYPE</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: modelname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Find type or metaclass in metamodel</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"><p>2: typename</p></td><td style="text-align:left;width:3.595cm; " class="ce48"> </td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce50"><p>12</p></td><td style="text-align:left;width:3.468cm; " class="ce51"><p>FINDTYPE_S</p></td><td style="text-align:left;width:2.542cm; " class="ce51"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce51"><p>0: modelname</p></td><td style="text-align:left;width:15.307cm; " class="ce51"><p>Find type or metaclass in metamodel given on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"> </td><td style="text-align:left;width:3.595cm; " class="ce48"><p>1: typename</p></td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>13</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>NEW</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: modelname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: type</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Creates a new model element, given an output model name</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce50"><p>14</p></td><td style="text-align:left;width:3.468cm; " class="ce51"><p>NEW_S</p></td><td style="text-align:left;width:2.542cm; " class="ce51"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce51"><p>0: modelname</p></td><td style="text-align:left;width:15.307cm; " class="ce51"><p>Creates a new model element, given an output model name on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce51"> </td><td style="text-align:left;width:3.468cm; " class="ce51"> </td><td style="text-align:left;width:2.542cm; " class="ce51"> </td><td style="text-align:left;width:3.595cm; " class="ce51"><p>1: type</p></td><td style="text-align:left;width:15.307cm; " class="ce51"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>15</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>DELETE</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Deletes the object on the stack from its model</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>16</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>DUP</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Duplicates stack top value</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>17</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>DUP_X1</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Pops top two values from stack, pushes top value, then pushes original two values back</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>18</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>SWAP</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Swaps top two values on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>19</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>SWAP_X1</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Swaps third value over top two values on the stack (abc... → cab...)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce52"><p>20</p></td><td style="text-align:left;width:3.468cm; " class="ce53"><p>IF</p></td><td style="text-align:left;width:2.542cm; " class="ce53"><p>1: target offset</p></td><td style="text-align:left;width:3.595cm; " class="ce53"><p>0: boolean value</p></td><td style="text-align:left;width:15.307cm; " class="ce53"><p>If stack top value is true, branch to target offset</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce52"><p>21</p></td><td style="text-align:left;width:3.468cm; " class="ce53"><p>IFN</p></td><td style="text-align:left;width:2.542cm; " class="ce53"><p>1: target offset</p></td><td style="text-align:left;width:3.595cm; " class="ce53"><p>0: boolean value</p></td><td style="text-align:left;width:15.307cm; " class="ce53"><p>If stack top value is false, branch to target offset</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce52"><p>22</p></td><td style="text-align:left;width:3.468cm; " class="ce53"><p>GOTO</p></td><td style="text-align:left;width:2.542cm; " class="ce53"><p>1: target offset</p></td><td style="text-align:left;width:3.595cm; " class="ce53"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce53"><p>Branch to target offset</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce52"><p>23</p></td><td style="text-align:left;width:3.468cm; " class="ce53"><p>ITERATE</p></td><td style="text-align:left;width:2.542cm; " class="ce53"><p>1: target offset</p></td><td style="text-align:left;width:3.595cm; " class="ce53"><p>0: collection value</p></td><td style="text-align:left;width:15.307cm; " class="ce53"><p>Runs the following instructions up to ENDITERATE for each element in the collection;</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce52"> </td><td style="text-align:left;width:3.468cm; " class="ce53"> </td><td style="text-align:left;width:2.542cm; " class="ce53"> </td><td style="text-align:left;width:3.595cm; " class="ce53"> </td><td style="text-align:left;width:15.307cm; " class="ce53"><p>offset marks the matching ENDITERATE</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce52"><p>24</p></td><td style="text-align:left;width:3.468cm; " class="ce53"><p>ENDITERATE</p></td><td style="text-align:left;width:2.542cm; " class="ce53"><p>1: target offset</p></td><td style="text-align:left;width:3.595cm; " class="ce53"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce53"><p>Marks the end of an ITERATE run of instructions; offset marks the matching ITERATE</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>25</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>INVOKE</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: opname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Regular dynamic method invocation, based on runtime type information</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"><p>2: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce48"> </td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>26</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>INVOKE_SUPER</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: opname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Dynamic method invocation of superclass, relative to current execution context</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"><p>2: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce48"> </td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce49"><p>27</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>INVOKE_STATIC</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: opname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Static method invocation; first argument is a metaclass, or Java class for native static operations</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"><p>2: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce48"> </td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce50"><p>28</p></td><td style="text-align:left;width:3.468cm; " class="ce51"><p>ALLINST</p></td><td style="text-align:left;width:2.542cm; " class="ce51"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce51"><p>0: type</p></td><td style="text-align:left;width:15.307cm; " class="ce51"><p>Finds all instances of the given type in all input models</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce50"><p>29</p></td><td style="text-align:left;width:3.468cm; " class="ce51"><p>ALLINST_IN</p></td><td style="text-align:left;width:2.542cm; " class="ce51"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce51"><p>0: type</p></td><td style="text-align:left;width:15.307cm; " class="ce51"><p>Finds all instances of the given type in given input model</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:left;width:0.707cm; " class="ce51"> </td><td style="text-align:left;width:3.468cm; " class="ce51"> </td><td style="text-align:left;width:2.542cm; " class="ce51"> </td><td style="text-align:left;width:3.595cm; " class="ce51"><p>1: modelname</p></td><td style="text-align:left;width:15.307cm; " class="ce51"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>30</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>ISNULL</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Pushes TRUE if value is null, FALSE otherwise</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce49"><p>31</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>GETENVTYPE</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Pushes the ExecEnv type on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>32</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>NOT</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: boolean value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Pushes TRUE if value is FALSE, FALSE otherwise</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce49"><p>33</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>AND</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: code block #</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: first value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Pushes the boolean AND result of the first value and the result of codeblock on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce49"><p>34</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>OR</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: code block #</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: first value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Pushes the boolean OR result of the first value and the result of codeblock on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>35</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>XOR</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: first value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Pushes the boolean XOR result on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce49"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"> </td><td style="text-align:left;width:3.595cm; " class="ce48"><p>1: second value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce49"><p>36</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>IMPLIES</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: code block #</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: first value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Pushes the boolean IMPLIES result of the first value and the result of codeblock on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce49"><p>37</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>IFTE</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: then cb #</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: boolean value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Executes “then” if TRUE, “else” otherwise</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"><p>2: else cb #</p></td><td style="text-align:left;width:3.595cm; " class="ce48"> </td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce52"><p>38</p></td><td style="text-align:left;width:3.468cm; " class="ce53"><p>RETURN</p></td><td style="text-align:left;width:2.542cm; " class="ce53"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce53"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce53"><p>Returns from a code block</p></td><td style="text-align:left;width:2.267cm; " class="ce62"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>39</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>GETCB</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: code block #</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Pushes nested code block onto the stack (lambda expression)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce49"><p>40</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>INVOKE_ALL_CBS</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Invokes all nested code blocks and pushes results on the stack</p></td><td style="text-align:left;width:2.267cm; " class="ce62"> </td></tr><tr class="ro4"><td style="text-align:right; width:0.707cm; " class="ce49"><p>41</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>INVOKE_CB</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: code block #</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Invokes nested code block (lambda expression)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"><p>2: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce48"> </td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce52"><p>42</p></td><td style="text-align:left;width:3.468cm; " class="ce53"><p>INVOKE_CB_S</p></td><td style="text-align:left;width:2.542cm; " class="ce53"><p>1: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce53"><p>0..n: arguments</p></td><td style="text-align:left;width:15.307cm; " class="ce53"><p>Invokes code block on stack (lambda expression)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce53"> </td><td style="text-align:left;width:3.468cm; " class="ce53"> </td><td style="text-align:left;width:2.542cm; " class="ce53"> </td><td style="text-align:left;width:3.595cm; " class="Default"><p>n+1: code block</p></td><td style="text-align:left;width:15.307cm; " class="ce53"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce50"><p>43</p></td><td style="text-align:left;width:3.468cm; " class="ce51"><p>MATCH</p></td><td style="text-align:left;width:2.542cm; " class="ce51"><p>1: rulename</p></td><td style="text-align:left;width:3.595cm; " class="ce51"><p>0..n: input elements</p></td><td style="text-align:left;width:15.307cm; " class="ce51"><p>Matches the given rule, and invokes the pre-apply code for each match</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:left;width:0.707cm; " class="ce50"> </td><td style="text-align:left;width:3.468cm; " class="ce51"> </td><td style="text-align:left;width:2.542cm; " class="ce51"><p>2: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce51"> </td><td style="text-align:left;width:15.307cm; " class="ce51"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce50"><p>44</p></td><td style="text-align:left;width:3.468cm; " class="ce51"><p>MATCH_S</p></td><td style="text-align:left;width:2.542cm; " class="ce51"><p>1: nr_of_args</p></td><td style="text-align:left;width:3.595cm; " class="ce51"><p>0..n: input elements</p></td><td style="text-align:left;width:15.307cm; " class="ce51"><p>Matches the rule on the stack, and invokes the pre-apply code for each match</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce50"> </td><td style="text-align:left;width:3.468cm; " class="ce51"> </td><td style="text-align:left;width:2.542cm; " class="ce51"> </td><td style="text-align:left;width:3.595cm; " class="ce60"><p>n+1: rule</p></td><td style="text-align:left;width:15.307cm; " class="ce51"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce49"><p>45</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>ADD</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Adds object property value</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"> </td><td style="text-align:left;width:3.595cm; " class="ce48"><p>1: value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce49"><p>46</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>REMOVE</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Removes object property value</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"> </td><td style="text-align:left;width:3.595cm; " class="ce48"><p>1: value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce49"><p>47</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>INSERT</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Adds object property value at the given index (starting at 0)</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"> </td><td style="text-align:left;width:3.595cm; " class="ce48"><p>1: value</p></td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce48"> </td><td style="text-align:left;width:3.468cm; " class="ce48"> </td><td style="text-align:left;width:2.542cm; " class="ce48"> </td><td style="text-align:left;width:3.595cm; " class="ce48"><p>2: index</p></td><td style="text-align:left;width:15.307cm; " class="ce48"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce48"><p>48</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>GET_SUPER</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>1: propname</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>0: object</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Get object property value of superclass onto stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro5"><td style="text-align:right; width:0.707cm; " class="ce48"><p>49</p></td><td style="text-align:left;width:3.468cm; " class="ce48"><p>GETENV</p></td><td style="text-align:left;width:2.542cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:3.595cm; " class="ce48"><p>-</p></td><td style="text-align:left;width:15.307cm; " class="ce48"><p>Pushes the ExecEnv instance on the stack</p></td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce54"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce55"> </td><td style="text-align:left;width:3.468cm; " class="ce58"><p>Instructions marked in grey are not (yet) used by any compiler for EMFTVM</p></td><td style="text-align:left;width:2.542cm; " class="ce59"> </td><td style="text-align:left;width:3.595cm; " class="ce59"> </td><td style="text-align:left;width:15.307cm; " class="ce61"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce54"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce54"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce54"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:0.707cm; " class="ce54"> </td><td style="text-align:left;width:3.468cm; " class="Default"> </td><td style="text-align:left;width:2.542cm; " class="Default"> </td><td style="text-align:left;width:3.595cm; " class="Default"> </td><td style="text-align:left;width:15.307cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td></tr></table><table border="0" cellspacing="0" cellpadding="0" class="ta4"><colgroup><col width="174"/><col width="288"/><col width="99"/><col width="561"/></colgroup><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>EMF TVM file format</p></td><td style="text-align:left;width:6.592cm; " class="ce63"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Magic</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>6</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>“EMFTVM” in ASCII</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Version</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>6</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>2</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Short integer containing the version number starting at 1</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Cpcount</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Constant pool count = number of entries in the constant pool</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Constant pool</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>12</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>cpsize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Constant pool table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Module name</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>12+cpsize</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Reference to module name string in constant pool</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Source name</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>16+cpsize</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Reference to source file name in constant pool</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Input model count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>20+cpsize</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of input models</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Input model table</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>24+cpsize</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>isz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Table of model declarations (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Inout model count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>24+cpsize+isz</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of input/output models</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Inout model table</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>28+cpsize+isz</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>iosz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Table of model declarations (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Output model count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>28+cpsize+isz+iosz</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of output models</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Output model table</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>32+cpsize+isz+iosz</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>osz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Table of model declarations (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Import count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>32+cpsize+isz+iosz+osz</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of imported modules</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Imports table</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>36+cpsize+isz+iosz+osz</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>itsize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>List of name references of imported modules</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Feature count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>36+cpsize+isz+iosz+osz+itsize</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of features (fields, operations)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Feature table</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>40+cpsize+isz+iosz+osz+itsize</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>fsize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Feature table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Rule count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>40+cpsize+isz+iosz+osz+itsize+fsize</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of transformation rules</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Rule table</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>44+cpsize+isz+iosz+osz+itsize+fsize</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>rtsize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Rule table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>Constant pool</p></td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Tag</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Constant type tag</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Value</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>vsize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Constant value (size depends on tag)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Tag</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Size</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce65"><p>Description</p></td></tr><tr class="ro5"><td style="text-align:right; width:3.976cm; " class="ce66"><p>0</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>stringsize</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce69"><p><span class="T1"><a href="http://download.oracle.com/javase/6/docs/api/java/io/DataInput.html#modified-utf-8">String in modified UTF-8: http://download.oracle.com/javase/6/docs/api/java/io/DataInput.html#modified-utf-8</a></span></p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>1</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce66"><p>Integer (see DataInputStream.readInt())</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>2</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>8</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce66"><p>Double (see DataInputStream.readDouble())</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>3</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>1</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce66"><p>Byte</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>4</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>1</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce66"><p>Char</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>5</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce66"><p>Float</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>6</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>2</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce66"><p>Short</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>7</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>8</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce66"><p>Long</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>8</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>stringsize</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce66"><p>Enumeration literal encoded as a modified UTF-8 string</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>9</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>0</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce66"><p>Null</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>Model declaration table</p></td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Model name</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Metamodel name</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Metamodel name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>Feature table</p></td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Tag</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Feature type tag</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Feature description</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>fsize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Feature (format depends on tag)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce70"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Tag</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Description</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce65"><p>Format</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>0</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>Field</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce67"><p>See field entry</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>1</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>StaticField</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce67"><p>See field entry</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>2</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>Operation</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce67"><p>See operation entry</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>3</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>StaticOperation</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce67"><p>See operation entry</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>QueryOperation</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce67"><p>See operation entry</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>5</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>StaticQueryOperation</p></td><td colspan="2" style="text-align:left;width:2.267cm; " class="ce67"><p>See operation entry</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>Field entry</p></td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Field name</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Field name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Field type</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Field type name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Field type model</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Field type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Field context</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Field context type reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Field context model</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Field context type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Initialiser code block</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>20</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>csize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Initialisation code block (see code block)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="Default"> </td><td style="text-align:left;width:6.592cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>Operation entry</p></td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Operation name</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Operation name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Return type</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Operation return type reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Return type model</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Operation return type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Operation context</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Operation context type reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Operation context model</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Operation context type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Parameter count</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>20</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of parameters</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Parameter table</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>24</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>ptsize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Parameter table (see static field table)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Code block</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>24+ptsize</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>csize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Code block (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="Default"> </td><td style="text-align:left;width:6.592cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>Code block</p></td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce67"><p>Max. locals</p></td><td style="text-align:right; width:6.592cm; " class="ce67"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce71"><p>Maximum number of local variables (-1 if unknown)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce67"><p>Max. stack size</p></td><td style="text-align:right; width:6.592cm; " class="ce67"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce71"><p>Maximum number of stack elements (-1 if unknown)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Local variable count</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of local variables</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Local variable table</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>12</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>lvsize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Local variable table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Line number count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>12+lvsize</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of line number table entries</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Line number table</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>16+lvsize</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>lnsize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Line number table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Nested code block count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>16+lvsize+lnsize</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of nested code blocks</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Nested code blocks</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>20+lvsize+lnsize</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>nsize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Nested code blocks</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Instruction count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>20+lvsize+lnsize+nsize</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of instructions</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Instruction list</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>24+lvsize_lnsize+nsize</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>isize</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>List of instructions (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce70"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>Instruction list</p></td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce67"><p>Line number index</p></td><td style="text-align:right; width:6.592cm; " class="ce67"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce71"><p>Line number table index, or -1 if no line number available</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Opcode</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Instruction (see opcode reference)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Parameter 1</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>First parameter (depends on instruction)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Parameter 2</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Second parameter (depends on instruction)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>…</p></td><td style="text-align:left;width:6.592cm; " class="ce66"> </td><td style="text-align:left;width:2.267cm; " class="ce66"> </td><td style="text-align:left;width:12.829cm; " class="ce48"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>Line number table</p></td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce67"><p>Start line</p></td><td style="text-align:right; width:6.592cm; " class="ce67"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce71"><p>Start line number</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce67"><p>Start column</p></td><td style="text-align:right; width:6.592cm; " class="ce67"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce71"><p>Start column number</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce67"><p>End line</p></td><td style="text-align:right; width:6.592cm; " class="ce67"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce71"><p>End line number</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce67"><p>End column</p></td><td style="text-align:right; width:6.592cm; " class="ce67"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce71"><p>End column number</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce67"><p>Start character</p></td><td style="text-align:right; width:6.592cm; " class="ce67"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce71"><p>Start character in the source file stream</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce67"><p>End character</p></td><td style="text-align:right; width:6.592cm; " class="ce67"><p>20</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce71"><p>End character in the source file stream</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>Local variable table</p></td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Slot</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Variable slot number (starting at 0)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Name</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Variable name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Type</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Type name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Start instruction</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Start instruction offset</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>End instruction</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>End instruction offset</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce56"><p>Rule table</p></td><td style="text-align:left;width:6.592cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="Default"> </td><td style="text-align:left;width:6.592cm; " class="Default"> </td><td style="text-align:left;width:2.267cm; " class="Default"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Rule name</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Rule name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Rule mode</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Rule mode code (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Abstract</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Whether the rule is abstract (1 or 0)</p></td></tr><tr class="ro5"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Trace mode</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Trace mode bitset (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>DistinctElements</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Whether the rule matches distinct input elements (1 or 0)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Input element count</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>20</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of input model elements</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Input element table</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>24</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>iesz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Input model element table (see detailed description)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Output element count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>24+iesz</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of output model elements</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Output element table</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>28+iesz</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>oesz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Output model element table (see output element table)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Super-rule count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>28+iesz+oesz</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of super-rules</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Super-rule table</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>32+iesz+oesz</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>srsz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Super-rule table (list of super-rule name references)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Rule field count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>32+iesz+oesz+srsz</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of rule fields</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Rule field table</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>36+iesz+oesz+srsz</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>fsz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Rule field table (see feature table)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Matcher count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>36+iesz+oesz+srsz+fsz</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of matcher code blocks to follow (0 or 1)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Matcher code block</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>40+iesz+oesz+srsz+fsz</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>msz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Matcher code block (see code block)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Applier count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>40+iesz+oesz+srsz+fsz+msz</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of applier code blocks to follow (0 or 1)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Applier code block</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>44+iesz+oesz+srsz+fsz+msz</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>asz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Applier code block (see code block)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Post-apply count</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>44+iesz+oesz+srsz+fsz+msz+asz</p></td><td style="text-align:right; width:2.267cm; " class="ce67"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of post-apply code blocks to follow (0 or 1)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Post-apply code block</p></td><td style="text-align:left;width:6.592cm; " class="ce66"><p>48+iesz+oesz+srsz+fsz+msz+asz</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>psz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Post-apply code block (see code block)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Rule mode</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce65"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>0</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce66"><p>Manual application</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>1</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce66"><p>Automatic single application</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>2</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce66"><p>Automatic recursive application (priority given by rule order of appearance)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Trace mode</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce65"><p>Comment (any combination of the bit values below can occur)</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>0</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce66"><p>Standard trace</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>1</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce66"><p>Default trace</p></td></tr><tr class="ro4"><td style="text-align:right; width:3.976cm; " class="ce66"><p>2</p></td><td colspan="3" style="text-align:left;width:6.592cm; " class="ce66"><p>Unique trace</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>Input element table</p></td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Element name</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Input element name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Element type</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Input element type reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Element type model</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Input element type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Maps to self</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Whether input element trace maps to itself (0 or 1)</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Element model count</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Number of input element models</p></td></tr><tr class="ro5"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Element models</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>20</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>iemsz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Input element model name references</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce63"><p>Output element table</p></td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:6.592cm; " class="ce65"><p>Offset</p></td><td style="text-align:left;width:2.267cm; " class="ce65"><p>Length</p></td><td style="text-align:left;width:12.829cm; " class="ce57"><p>Comment</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Element name</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>0</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Element name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Element type</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>4</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Element type reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Element type model</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>8</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Element type model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Element model</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>12</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Element model name reference</p></td></tr><tr class="ro4"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Maps to element count</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>16</p></td><td style="text-align:right; width:2.267cm; " class="ce66"><p>4</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Source element mapping count</p></td></tr><tr class="ro5"><td style="text-align:left;width:3.976cm; " class="ce66"><p>Maps to elements</p></td><td style="text-align:right; width:6.592cm; " class="ce66"><p>20</p></td><td style="text-align:left;width:2.267cm; " class="ce68"><p>mtsz</p></td><td style="text-align:left;width:12.829cm; " class="ce48"><p>Source element mapping name references</p></td></tr><tr class="ro5"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr><tr class="ro7"><td style="text-align:left;width:3.976cm; " class="ce64"> </td><td style="text-align:left;width:6.592cm; " class="ce64"> </td><td style="text-align:left;width:2.267cm; " class="ce64"> </td><td style="text-align:left;width:12.829cm; " class="Default"> </td></tr></table><table border="0" cellspacing="0" cellpadding="0" class="ta3"><colgroup><col width="93"/><col width="344"/></colgroup><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce63"><p>EMF TVM native types</p></td><td style="text-align:left;width:7.869cm; " class="Default"> </td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="Default"> </td><td style="text-align:left;width:7.869cm; " class="Default"> </td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce65"><p>Name</p></td><td style="text-align:left;width:7.869cm; " class="ce65"><p>Java class</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce48"><p>Object</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>java.lang.Object</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce48"><p>Collection</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>org.eclipse.m2m.atl.emftvm.util.LazyCollection</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce48"><p>Bag</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>org.eclipse.m2m.atl.emftvm.util.LazyBag</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce48"><p>Sequence</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>org.eclipse.m2m.atl.emftvm.util.LazyList</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce48"><p>Set</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>org.eclipse.m2m.atl.emftvm.util.LazySet</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce48"><p>OrderedSet</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>org.eclipse.m2m.atl.emftvm.util.LazyOrderedSet</p></td></tr><tr class="ro3"><td style="text-align:left;width:2.122cm; " class="ce48"><p>Map</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>java.util.Map</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce48"><p>Tuple</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>org.eclipse.m2m.atl.emftvm.util.Tuple</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce48"><p>Boolean</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>java.lang.Boolean</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce48"><p>Integer</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>java.lang.Integer</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce48"><p>Real</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>java.lang.Double</p></td></tr><tr class="ro1"><td style="text-align:left;width:2.122cm; " class="ce48"><p>String</p></td><td style="text-align:left;width:7.869cm; " class="ce48"><p>java.lang.String</p></td></tr></table></body></html>
\ No newline at end of file diff --git a/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.ods b/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.ods Binary files differindex 455cfa4d..8b6b7cb5 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.ods +++ b/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.ods diff --git a/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.xls b/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.xls Binary files differindex 56dfe7d3..30b9a057 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.xls +++ b/plugins/org.eclipse.m2m.atl.emftvm/doc/EMFTVM.xls diff --git a/plugins/org.eclipse.m2m.atl.emftvm/model/emftvm.ecore b/plugins/org.eclipse.m2m.atl.emftvm/model/emftvm.ecore index 9d1de26a..674726d0 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/model/emftvm.ecore +++ b/plugins/org.eclipse.m2m.atl.emftvm/model/emftvm.ecore @@ -351,7 +351,7 @@ eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean" transient="true"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="currentPhase" eType="#//RuleMode" - changeable="false" transient="true" defaultValueLiteral="null"/> + changeable="false" transient="true" defaultValueLiteral="manual"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="Model"> <eOperations name="allInstancesOf"> @@ -476,7 +476,7 @@ <eStructuralFeatures xsi:type="ecore:EReference" name="owningBlock" lowerBound="1" eType="#//CodeBlock" eOpposite="#//CodeBlock/code"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="opcode" lowerBound="1" - eType="#//Opcode" changeable="false" transient="true" defaultValueLiteral="" + eType="#//Opcode" changeable="false" transient="true" defaultValueLiteral="PUSH" derived="true"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="stackProduction" lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt" @@ -606,6 +606,9 @@ <eParameters name="env" eType="#//ExecEnv"/> </eOperations> <eOperations name="clearFields"/> + <eOperations name="findInputElement" eType="#//InputRuleElement"> + <eParameters name="name" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/> + </eOperations> <eStructuralFeatures xsi:type="ecore:EReference" name="module" eType="#//Module" eOpposite="#//Module/rules"/> <eStructuralFeatures xsi:type="ecore:EAttribute" name="mode" lowerBound="1" eType="#//RuleMode"/> @@ -658,6 +661,8 @@ containment="true" eOpposite="#//CodeBlock/bindingFor"/> <eStructuralFeatures xsi:type="ecore:EReference" name="inputFor" eType="#//Rule" eOpposite="#//Rule/inputElements"/> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="mapsToSelf" lowerBound="1" + eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="OutputRuleElement" eSuperTypes="#//RuleElement"> <eStructuralFeatures xsi:type="ecore:EReference" name="mapsTo" upperBound="-1" diff --git a/plugins/org.eclipse.m2m.atl.emftvm/model/emftvm.genmodel b/plugins/org.eclipse.m2m.atl.emftvm/model/emftvm.genmodel index 51e830b0..370adeb6 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/model/emftvm.genmodel +++ b/plugins/org.eclipse.m2m.atl.emftvm/model/emftvm.genmodel @@ -140,6 +140,11 @@ <genParameters ecoreParameter="emftvm.ecore#//ExecEnv/loadModule/resolver"/> <genParameters ecoreParameter="emftvm.ecore#//ExecEnv/loadModule/name"/> </genOperations> + <genOperations ecoreOperation="emftvm.ecore#//ExecEnv/loadModule.1"> + <genParameters ecoreParameter="emftvm.ecore#//ExecEnv/loadModule.1/resolver"/> + <genParameters ecoreParameter="emftvm.ecore#//ExecEnv/loadModule.1/name"/> + <genParameters ecoreParameter="emftvm.ecore#//ExecEnv/loadModule.1/validate"/> + </genOperations> <genOperations ecoreOperation="emftvm.ecore#//ExecEnv/findOperation"> <genParameters ecoreParameter="emftvm.ecore#//ExecEnv/findOperation/context"/> <genParameters ecoreParameter="emftvm.ecore#//ExecEnv/findOperation/name"/> @@ -519,6 +524,7 @@ <genClasses ecoreClass="emftvm.ecore#//InputRuleElement"> <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference emftvm.ecore#//InputRuleElement/binding"/> <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference emftvm.ecore#//InputRuleElement/inputFor"/> + <genFeatures createChild="false" ecoreFeature="ecore:EAttribute emftvm.ecore#//InputRuleElement/mapsToSelf"/> <genOperations ecoreOperation="emftvm.ecore#//InputRuleElement/createIterable"> <genParameters ecoreParameter="emftvm.ecore#//InputRuleElement/createIterable/env"/> </genOperations> diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/EmftvmPackage.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/EmftvmPackage.java index b6342a35..09a9b318 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/EmftvmPackage.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/EmftvmPackage.java @@ -1895,13 +1895,22 @@ public interface EmftvmPackage extends EPackage { int INPUT_RULE_ELEMENT__INPUT_FOR = RULE_ELEMENT_FEATURE_COUNT + 1; /** + * The feature id for the '<em><b>Maps To Self</b></em>' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int INPUT_RULE_ELEMENT__MAPS_TO_SELF = RULE_ELEMENT_FEATURE_COUNT + 2; + + /** * The number of structural features of the '<em>Input Rule Element</em>' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int INPUT_RULE_ELEMENT_FEATURE_COUNT = RULE_ELEMENT_FEATURE_COUNT + 2; + int INPUT_RULE_ELEMENT_FEATURE_COUNT = RULE_ELEMENT_FEATURE_COUNT + 3; /** * The meta object id for the '{@link org.eclipse.m2m.atl.emftvm.impl.OutputRuleElementImpl <em>Output Rule Element</em>}' class. @@ -8917,6 +8926,17 @@ public interface EmftvmPackage extends EPackage { EReference getInputRuleElement_InputFor(); /** + * Returns the meta object for the attribute '{@link org.eclipse.m2m.atl.emftvm.InputRuleElement#isMapsToSelf <em>Maps To Self</em>}'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the attribute '<em>Maps To Self</em>'. + * @see org.eclipse.m2m.atl.emftvm.InputRuleElement#isMapsToSelf() + * @see #getInputRuleElement() + * @generated + */ + EAttribute getInputRuleElement_MapsToSelf(); + + /** * Returns the meta object for class '{@link org.eclipse.m2m.atl.emftvm.OutputRuleElement <em>Output Rule Element</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -10945,6 +10965,14 @@ public interface EmftvmPackage extends EPackage { EReference INPUT_RULE_ELEMENT__INPUT_FOR = eINSTANCE.getInputRuleElement_InputFor(); /** + * The meta object literal for the '<em><b>Maps To Self</b></em>' attribute feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EAttribute INPUT_RULE_ELEMENT__MAPS_TO_SELF = eINSTANCE.getInputRuleElement_MapsToSelf(); + + /** * The meta object literal for the '{@link org.eclipse.m2m.atl.emftvm.impl.OutputRuleElementImpl <em>Output Rule Element</em>}' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/ExecEnv.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/ExecEnv.java index 568bc8c2..c6e44af2 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/ExecEnv.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/ExecEnv.java @@ -141,7 +141,7 @@ public interface ExecEnv extends EObject { /** * Returns the value of the '<em><b>Current Phase</b></em>' attribute. - * The default value is <code>"null"</code>. + * The default value is <code>"manual"</code>. * The literals are from the enumeration {@link org.eclipse.m2m.atl.emftvm.RuleMode}. * <!-- begin-user-doc --> * <p> @@ -152,7 +152,7 @@ public interface ExecEnv extends EObject { * @return the value of the '<em>Current Phase</em>' attribute. * @see org.eclipse.m2m.atl.emftvm.RuleMode * @see org.eclipse.m2m.atl.emftvm.EmftvmPackage#getExecEnv_CurrentPhase() - * @model default="null" transient="true" changeable="false" + * @model default="manual" transient="true" changeable="false" * @generated */ RuleMode getCurrentPhase(); diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/InputRuleElement.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/InputRuleElement.java index 99126862..1949db59 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/InputRuleElement.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/InputRuleElement.java @@ -25,6 +25,7 @@ import org.eclipse.emf.ecore.EObject; * <ul> * <li>{@link org.eclipse.m2m.atl.emftvm.InputRuleElement#getBinding <em>Binding</em>}</li> * <li>{@link org.eclipse.m2m.atl.emftvm.InputRuleElement#getInputFor <em>Input For</em>}</li> + * <li>{@link org.eclipse.m2m.atl.emftvm.InputRuleElement#isMapsToSelf <em>Maps To Self</em>}</li> * </ul> * </p> * @@ -90,6 +91,32 @@ public interface InputRuleElement extends RuleElement { void setInputFor(Rule value); /** + * Returns the value of the '<em><b>Maps To Self</b></em>' attribute. + * <!-- begin-user-doc --> + * <p> + * If the meaning of the '<em>Maps To Self</em>' attribute isn't clear, + * there really should be more of a description here... + * </p> + * <!-- end-user-doc --> + * @return the value of the '<em>Maps To Self</em>' attribute. + * @see #setMapsToSelf(boolean) + * @see org.eclipse.m2m.atl.emftvm.EmftvmPackage#getInputRuleElement_MapsToSelf() + * @model required="true" + * @generated + */ + boolean isMapsToSelf(); + + /** + * Sets the value of the '{@link org.eclipse.m2m.atl.emftvm.InputRuleElement#isMapsToSelf <em>Maps To Self</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @param value the new value of the '<em>Maps To Self</em>' attribute. + * @see #isMapsToSelf() + * @generated + */ + void setMapsToSelf(boolean value); + + /** * <!-- begin-user-doc --> * Creates a new {@link Iterable} of possible match values for this rule element. * @param env the execution environment context diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/Instruction.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/Instruction.java index 9e6b4f5a..d1e1d55e 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/Instruction.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/Instruction.java @@ -66,7 +66,7 @@ public interface Instruction extends EObject { /** * Returns the value of the '<em><b>Opcode</b></em>' attribute. - * The default value is <code>""</code>. + * The default value is <code>"PUSH"</code>. * The literals are from the enumeration {@link org.eclipse.m2m.atl.emftvm.Opcode}. * <!-- begin-user-doc --> * <p> @@ -77,7 +77,7 @@ public interface Instruction extends EObject { * @return the value of the '<em>Opcode</em>' attribute. * @see org.eclipse.m2m.atl.emftvm.Opcode * @see org.eclipse.m2m.atl.emftvm.EmftvmPackage#getInstruction_Opcode() - * @model default="" required="true" transient="true" changeable="false" derived="true" + * @model default="PUSH" required="true" transient="true" changeable="false" derived="true" * @generated */ Opcode getOpcode(); diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/Rule.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/Rule.java index b7dea8bf..239d362f 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/Rule.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/Rule.java @@ -706,4 +706,17 @@ public interface Rule extends NamedElement { */ void clearFields(); + /** + * <!-- begin-user-doc --> + * Finds the {@link InputRuleElement} with the given name within the rule inheritance hierarchy depth-first. + * + * @param name + * the input element name + * @return the {@link InputRuleElement} with the given name or <code>null</code> + * <!-- end-user-doc --> + * @model + * @generated + */ + InputRuleElement findInputElement(String name); + } // Rule diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/CodeBlockImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/CodeBlockImpl.java index 6361d08e..f8ee6dd9 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/CodeBlockImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/CodeBlockImpl.java @@ -374,7 +374,7 @@ public class CodeBlockImpl extends EObjectImpl implements CodeBlock { */ public Rule getMatcherFor() { if (eContainerFeatureID() != EmftvmPackage.CODE_BLOCK__MATCHER_FOR) return null; - return (Rule)eContainer(); + return (Rule)eInternalContainer(); } /** @@ -418,7 +418,7 @@ public class CodeBlockImpl extends EObjectImpl implements CodeBlock { */ public Rule getApplierFor() { if (eContainerFeatureID() != EmftvmPackage.CODE_BLOCK__APPLIER_FOR) return null; - return (Rule)eContainer(); + return (Rule)eInternalContainer(); } /** @@ -462,7 +462,7 @@ public class CodeBlockImpl extends EObjectImpl implements CodeBlock { */ public Rule getPostApplyFor() { if (eContainerFeatureID() != EmftvmPackage.CODE_BLOCK__POST_APPLY_FOR) return null; - return (Rule)eContainer(); + return (Rule)eInternalContainer(); } /** @@ -506,7 +506,7 @@ public class CodeBlockImpl extends EObjectImpl implements CodeBlock { */ public Operation getBodyFor() { if (eContainerFeatureID() != EmftvmPackage.CODE_BLOCK__BODY_FOR) return null; - return (Operation)eContainer(); + return (Operation)eInternalContainer(); } /** @@ -550,7 +550,7 @@ public class CodeBlockImpl extends EObjectImpl implements CodeBlock { */ public Field getInitialiserFor() { if (eContainerFeatureID() != EmftvmPackage.CODE_BLOCK__INITIALISER_FOR) return null; - return (Field)eContainer(); + return (Field)eInternalContainer(); } /** @@ -607,7 +607,7 @@ public class CodeBlockImpl extends EObjectImpl implements CodeBlock { */ public CodeBlock getNestedFor() { if (eContainerFeatureID() != EmftvmPackage.CODE_BLOCK__NESTED_FOR) return null; - return (CodeBlock)eContainer(); + return (CodeBlock)eInternalContainer(); } /** @@ -675,7 +675,7 @@ public class CodeBlockImpl extends EObjectImpl implements CodeBlock { */ public InputRuleElement getBindingFor() { if (eContainerFeatureID() != EmftvmPackage.CODE_BLOCK__BINDING_FOR) return null; - return (InputRuleElement)eContainer(); + return (InputRuleElement)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/EmftvmFactoryImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/EmftvmFactoryImpl.java index b5469bf3..1d4bee6d 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/EmftvmFactoryImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/EmftvmFactoryImpl.java @@ -129,7 +129,7 @@ public class EmftvmFactoryImpl extends EFactoryImpl implements EmftvmFactory { */ public static EmftvmFactory init() { try { - EmftvmFactory theEmftvmFactory = (EmftvmFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.eclipse.org/m2m/atl/2011/EMFTVM"); + EmftvmFactory theEmftvmFactory = (EmftvmFactory)EPackage.Registry.INSTANCE.getEFactory(EmftvmPackage.eNS_URI); if (theEmftvmFactory != null) { return theEmftvmFactory; } diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/EmftvmPackageImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/EmftvmPackageImpl.java index a74f3d0d..bcff1330 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/EmftvmPackageImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/EmftvmPackageImpl.java @@ -2685,6 +2685,15 @@ public class EmftvmPackageImpl extends EPackageImpl implements EmftvmPackage { * <!-- end-user-doc --> * @generated */ + public EAttribute getInputRuleElement_MapsToSelf() { + return (EAttribute)inputRuleElementEClass.getEStructuralFeatures().get(2); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ public EClass getOutputRuleElement() { return outputRuleElementEClass; } @@ -3030,6 +3039,7 @@ public class EmftvmPackageImpl extends EPackageImpl implements EmftvmPackage { inputRuleElementEClass = createEClass(INPUT_RULE_ELEMENT); createEReference(inputRuleElementEClass, INPUT_RULE_ELEMENT__BINDING); createEReference(inputRuleElementEClass, INPUT_RULE_ELEMENT__INPUT_FOR); + createEAttribute(inputRuleElementEClass, INPUT_RULE_ELEMENT__MAPS_TO_SELF); outputRuleElementEClass = createEClass(OUTPUT_RULE_ELEMENT); createEReference(outputRuleElementEClass, OUTPUT_RULE_ELEMENT__MAPS_TO); @@ -3369,7 +3379,7 @@ public class EmftvmPackageImpl extends EPackageImpl implements EmftvmPackage { g1.getETypeArguments().add(g2); initEAttribute(getExecEnv_UniqueResults(), g1, "uniqueResults", null, 1, 1, ExecEnv.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED); initEAttribute(getExecEnv_JitDisabled(), theEcorePackage.getEBoolean(), "jitDisabled", null, 1, 1, ExecEnv.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - initEAttribute(getExecEnv_CurrentPhase(), this.getRuleMode(), "currentPhase", "null", 0, 1, ExecEnv.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getExecEnv_CurrentPhase(), this.getRuleMode(), "currentPhase", "manual", 0, 1, ExecEnv.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); EOperation op = addEOperation(execEnvEClass, this.getModule(), "loadModule", 0, 1, IS_UNIQUE, IS_ORDERED); addEParameter(op, this.getModuleResolver(), "resolver", 0, 1, IS_UNIQUE, IS_ORDERED); @@ -3656,7 +3666,7 @@ public class EmftvmPackageImpl extends EPackageImpl implements EmftvmPackage { initEClass(instructionEClass, Instruction.class, "Instruction", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getInstruction_OwningBlock(), this.getCodeBlock(), this.getCodeBlock_Code(), "owningBlock", null, 1, 1, Instruction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - initEAttribute(getInstruction_Opcode(), this.getOpcode(), "opcode", "", 1, 1, Instruction.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED); + initEAttribute(getInstruction_Opcode(), this.getOpcode(), "opcode", "PUSH", 1, 1, Instruction.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED); initEAttribute(getInstruction_StackProduction(), theEcorePackage.getEInt(), "stackProduction", "0", 1, 1, Instruction.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED); initEAttribute(getInstruction_StackConsumption(), theEcorePackage.getEInt(), "stackConsumption", "0", 1, 1, Instruction.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED); initEAttribute(getInstruction_StackLevel(), theEcorePackage.getEInt(), "stackLevel", "0", 1, 1, Instruction.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED); @@ -3778,6 +3788,9 @@ public class EmftvmPackageImpl extends EPackageImpl implements EmftvmPackage { addEOperation(ruleEClass, null, "clearFields", 0, 1, IS_UNIQUE, IS_ORDERED); + op = addEOperation(ruleEClass, this.getInputRuleElement(), "findInputElement", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, theEcorePackage.getEString(), "name", 0, 1, IS_UNIQUE, IS_ORDERED); + initEClass(ruleElementEClass, RuleElement.class, "RuleElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getRuleElement_Models(), theEcorePackage.getEString(), "models", null, 0, -1, RuleElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getRuleElement_EModels(), this.getModel(), null, "eModels", null, 0, -1, RuleElement.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED); @@ -3785,6 +3798,7 @@ public class EmftvmPackageImpl extends EPackageImpl implements EmftvmPackage { initEClass(inputRuleElementEClass, InputRuleElement.class, "InputRuleElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getInputRuleElement_Binding(), this.getCodeBlock(), this.getCodeBlock_BindingFor(), "binding", null, 0, 1, InputRuleElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEReference(getInputRuleElement_InputFor(), this.getRule(), this.getRule_InputElements(), "inputFor", null, 0, 1, InputRuleElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getInputRuleElement_MapsToSelf(), theEcorePackage.getEBoolean(), "mapsToSelf", null, 1, 1, InputRuleElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); op = addEOperation(inputRuleElementEClass, null, "createIterable", 0, 1, IS_UNIQUE, IS_ORDERED); addEParameter(op, this.getExecEnv(), "env", 0, 1, IS_UNIQUE, IS_ORDERED); diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/FeatureImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/FeatureImpl.java index 493661d6..0bff4f18 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/FeatureImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/FeatureImpl.java @@ -397,7 +397,7 @@ public abstract class FeatureImpl extends TypedElementImpl implements Feature { */ public Module getModule() { if (eContainerFeatureID() != EmftvmPackage.FEATURE__MODULE) return null; - return (Module)eContainer(); + return (Module)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/FieldImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/FieldImpl.java index 01ad4eea..502cf0d9 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/FieldImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/FieldImpl.java @@ -189,7 +189,7 @@ public class FieldImpl extends FeatureImpl implements Field { */ public Rule getRule() { if (eContainerFeatureID() != EmftvmPackage.FIELD__RULE) return null; - return (Rule)eContainer(); + return (Rule)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/InputRuleElementImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/InputRuleElementImpl.java index 6063c478..b7527090 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/InputRuleElementImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/InputRuleElementImpl.java @@ -38,6 +38,7 @@ import org.eclipse.m2m.atl.emftvm.util.LazyList; * <ul> * <li>{@link org.eclipse.m2m.atl.emftvm.impl.InputRuleElementImpl#getBinding <em>Binding</em>}</li> * <li>{@link org.eclipse.m2m.atl.emftvm.impl.InputRuleElementImpl#getInputFor <em>Input For</em>}</li> + * <li>{@link org.eclipse.m2m.atl.emftvm.impl.InputRuleElementImpl#isMapsToSelf <em>Maps To Self</em>}</li> * </ul> * </p> * @@ -55,6 +56,25 @@ public class InputRuleElementImpl extends RuleElementImpl implements InputRuleEl protected CodeBlock binding; /** + * The default value of the '{@link #isMapsToSelf() <em>Maps To Self</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #isMapsToSelf() + * @generated + * @ordered + */ + protected static final boolean MAPS_TO_SELF_EDEFAULT = false; + /** + * The cached value of the '{@link #isMapsToSelf() <em>Maps To Self</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #isMapsToSelf() + * @generated + * @ordered + */ + protected boolean mapsToSelf = MAPS_TO_SELF_EDEFAULT; + + /** * <!-- begin-user-doc --> * Creates a new {@link InputRuleElementImpl}. * <!-- end-user-doc --> @@ -130,7 +150,7 @@ public class InputRuleElementImpl extends RuleElementImpl implements InputRuleEl */ public Rule getInputFor() { if (eContainerFeatureID() != EmftvmPackage.INPUT_RULE_ELEMENT__INPUT_FOR) return null; - return (Rule)eContainer(); + return (Rule)eInternalContainer(); } /** @@ -167,6 +187,27 @@ public class InputRuleElementImpl extends RuleElementImpl implements InputRuleEl } /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public boolean isMapsToSelf() { + return mapsToSelf; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public void setMapsToSelf(boolean newMapsToSelf) { + boolean oldMapsToSelf = mapsToSelf; + mapsToSelf = newMapsToSelf; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, EmftvmPackage.INPUT_RULE_ELEMENT__MAPS_TO_SELF, oldMapsToSelf, mapsToSelf)); + } + + /** * <!-- begin-user-doc. --> * {@inheritDoc} * <!-- end-user-doc --> @@ -250,6 +291,8 @@ public class InputRuleElementImpl extends RuleElementImpl implements InputRuleEl return getBinding(); case EmftvmPackage.INPUT_RULE_ELEMENT__INPUT_FOR: return getInputFor(); + case EmftvmPackage.INPUT_RULE_ELEMENT__MAPS_TO_SELF: + return isMapsToSelf(); } return super.eGet(featureID, resolve, coreType); } @@ -269,6 +312,9 @@ public class InputRuleElementImpl extends RuleElementImpl implements InputRuleEl case EmftvmPackage.INPUT_RULE_ELEMENT__INPUT_FOR: setInputFor((Rule)newValue); return; + case EmftvmPackage.INPUT_RULE_ELEMENT__MAPS_TO_SELF: + setMapsToSelf((Boolean)newValue); + return; } super.eSet(featureID, newValue); } @@ -288,6 +334,9 @@ public class InputRuleElementImpl extends RuleElementImpl implements InputRuleEl case EmftvmPackage.INPUT_RULE_ELEMENT__INPUT_FOR: setInputFor((Rule)null); return; + case EmftvmPackage.INPUT_RULE_ELEMENT__MAPS_TO_SELF: + setMapsToSelf(MAPS_TO_SELF_EDEFAULT); + return; } super.eUnset(featureID); } @@ -305,8 +354,26 @@ public class InputRuleElementImpl extends RuleElementImpl implements InputRuleEl return binding != null; case EmftvmPackage.INPUT_RULE_ELEMENT__INPUT_FOR: return getInputFor() != null; + case EmftvmPackage.INPUT_RULE_ELEMENT__MAPS_TO_SELF: + return mapsToSelf != MAPS_TO_SELF_EDEFAULT; } return super.eIsSet(featureID); } + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public String toString() { + if (eIsProxy()) return super.toString(); + + StringBuffer result = new StringBuffer(super.toString()); + result.append(" (mapsToSelf: "); + result.append(mapsToSelf); + result.append(')'); + return result.toString(); + } + } //InputRuleElementImpl diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/InstructionImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/InstructionImpl.java index 24570fd3..b5ac0bc6 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/InstructionImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/InstructionImpl.java @@ -160,7 +160,7 @@ public abstract class InstructionImpl extends EObjectImpl implements Instruction */ public CodeBlock getOwningBlock() { if (eContainerFeatureID() != EmftvmPackage.INSTRUCTION__OWNING_BLOCK) return null; - return (CodeBlock)eContainer(); + return (CodeBlock)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/LineNumberImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/LineNumberImpl.java index 1b5732e8..7f21ac75 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/LineNumberImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/LineNumberImpl.java @@ -336,7 +336,7 @@ public class LineNumberImpl extends EObjectImpl implements LineNumber { */ public CodeBlock getOwningBlock() { if (eContainerFeatureID() != EmftvmPackage.LINE_NUMBER__OWNING_BLOCK) return null; - return (CodeBlock)eContainer(); + return (CodeBlock)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/LocalVariableImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/LocalVariableImpl.java index bf5a58fb..d291d239 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/LocalVariableImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/LocalVariableImpl.java @@ -581,7 +581,7 @@ public class LocalVariableImpl extends TypedElementImpl implements LocalVariable */ public CodeBlock getOwningBlock() { if (eContainerFeatureID() != EmftvmPackage.LOCAL_VARIABLE__OWNING_BLOCK) return null; - return (CodeBlock)eContainer(); + return (CodeBlock)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ModelDeclarationImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ModelDeclarationImpl.java index bbc35248..ff0b80ba 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ModelDeclarationImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ModelDeclarationImpl.java @@ -155,7 +155,7 @@ public class ModelDeclarationImpl extends EObjectImpl implements ModelDeclaratio */ public Module getInputModelFor() { if (eContainerFeatureID() != EmftvmPackage.MODEL_DECLARATION__INPUT_MODEL_FOR) return null; - return (Module)eContainer(); + return (Module)eInternalContainer(); } /** @@ -199,7 +199,7 @@ public class ModelDeclarationImpl extends EObjectImpl implements ModelDeclaratio */ public Module getInoutModelFor() { if (eContainerFeatureID() != EmftvmPackage.MODEL_DECLARATION__INOUT_MODEL_FOR) return null; - return (Module)eContainer(); + return (Module)eInternalContainer(); } /** @@ -243,7 +243,7 @@ public class ModelDeclarationImpl extends EObjectImpl implements ModelDeclaratio */ public Module getOutputModelFor() { if (eContainerFeatureID() != EmftvmPackage.MODEL_DECLARATION__OUTPUT_MODEL_FOR) return null; - return (Module)eContainer(); + return (Module)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/OutputRuleElementImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/OutputRuleElementImpl.java index 5124d6c6..c65db145 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/OutputRuleElementImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/OutputRuleElementImpl.java @@ -96,7 +96,7 @@ public class OutputRuleElementImpl extends RuleElementImpl implements OutputRule */ public Rule getOutputFor() { if (eContainerFeatureID() != EmftvmPackage.OUTPUT_RULE_ELEMENT__OUTPUT_FOR) return null; - return (Rule)eContainer(); + return (Rule)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ParameterImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ParameterImpl.java index 1b0d52c0..930d88bd 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ParameterImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/ParameterImpl.java @@ -67,7 +67,7 @@ public class ParameterImpl extends TypedElementImpl implements Parameter { */ public Operation getOperation() { if (eContainerFeatureID() != EmftvmPackage.PARAMETER__OPERATION) return null; - return (Operation)eContainer(); + return (Operation)eInternalContainer(); } /** diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/RuleImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/RuleImpl.java index 071296b2..64e23c0a 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/RuleImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/RuleImpl.java @@ -1022,10 +1022,11 @@ public class RuleImpl extends NamedElementImpl implements Rule { final TraceLink match = TraceFactory.eINSTANCE.createTraceLink(); final EList<SourceElement> ses = match.getSourceElements(); int i = 0; - for (RuleElement re : getInputElements()) { + for (InputRuleElement re : getInputElements()) { SourceElement se = TraceFactory.eINSTANCE.createSourceElement(); se.setName(re.getName()); se.setRuntimeObject(values[i++]); + se.setMapsToSelf(re.isMapsToSelf()); ses.add(se); } frame.getEnv().getMatches().getLinksByRule(getName(), true).getLinks().add(match); @@ -1049,6 +1050,8 @@ public class RuleImpl extends NamedElementImpl implements Rule { SourceElement se = TraceFactory.eINSTANCE.createSourceElement(); se.setName(v.getKey()); se.setRuntimeObject(v.getValue()); + InputRuleElement re = findInputElement(v.getKey()); + se.setMapsToSelf(re == null ? false : re.isMapsToSelf()); ses.add(se); } frame.getEnv().getMatches().getLinksByRule(getName(), true).getLinks().add(match); @@ -1596,7 +1599,7 @@ public class RuleImpl extends NamedElementImpl implements Rule { */ public Module getModule() { if (eContainerFeatureID() != EmftvmPackage.RULE__MODULE) return null; - return (Module)eContainer(); + return (Module)eInternalContainer(); } /** @@ -2329,6 +2332,26 @@ public class RuleImpl extends NamedElementImpl implements Rule { * <!-- begin-user-doc. --> * {@inheritDoc} * <!-- end-user-doc --> + * @generated NOT + */ + public InputRuleElement findInputElement(final String name) { + for (InputRuleElement ire : getInputElements()) { + if (name.equals(ire.getName())) { + return ire; + } + } + InputRuleElement ire = null; + final Iterator<Rule> superRules = getESuperRules().iterator(); + while (ire == null && superRules.hasNext()) { + ire = superRules.next().findInputElement(name); + } + return ire; + } + + /** + * <!-- begin-user-doc. --> + * {@inheritDoc} + * <!-- end-user-doc --> * @generated */ @SuppressWarnings("unchecked") diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/resource/EMFTVMResourceImpl.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/resource/EMFTVMResourceImpl.java index 020b56cc..071d7696 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/resource/EMFTVMResourceImpl.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/impl/resource/EMFTVMResourceImpl.java @@ -52,10 +52,30 @@ import org.eclipse.m2m.atl.emftvm.TypedElement; public class EMFTVMResourceImpl extends ResourceImpl { /** - * Magic header: "ETVM". - * http://www.asciitable.com/ - */ - public static final int MAGIC = 0x4554564D; + * Legacy magic header: "ETVM". + * + * @see <a href="http://www.asciitable.com/">http://www.asciitable.com/</a> + */ + public static final int MAGIC_LEGACY = 0x4554564D; + + /** + * Magic header part 1: "EMFT". + * + * @see <a href="http://www.asciitable.com/">http://www.asciitable.com/</a> + */ + public static final int MAGIC_00 = 0x454D4654; + + /** + * Magic header part 2: "VM..". + * + * @see <a href="http://www.asciitable.com/">http://www.asciitable.com/</a> + */ + public static final int MAGIC_01 = 0x564D0000; + + /** + * Current - and highest supported - bytecode format version. + */ + public static final int BYTECODE_VERSION = 1; /** Default trace mode value. */ public static final int TRACE_MODE_DEFAULT = 1; @@ -67,6 +87,8 @@ public class EMFTVMResourceImpl extends ResourceImpl { */ protected static final EmftvmFactory FACTORY = EmftvmFactory.eINSTANCE; + private int bytecodeVersion; + /** * Creates a new {@link EMFTVMResourceImpl}. */ @@ -83,15 +105,47 @@ public class EMFTVMResourceImpl extends ResourceImpl { } /** + * Returns the bytecode format version of the loaded file. + * + * @return the bytecodeVersion + */ + public int getBytecodeVersion() { + return bytecodeVersion; + } + + /** + * Sets the bytecode format version of the loaded file. + * + * @param bytecodeVersion + * the bytecodeVersion to set + */ + protected void setBytecodeVersion(int bytecodeVersion) { + this.bytecodeVersion = bytecodeVersion; + } + + /** * {@inheritDoc} */ @Override protected void doLoad(InputStream inputStream, Map<?, ?> options) throws IOException { final DataInputStream in = new DataInputStream(inputStream); - final int magic = in.readInt(); - if (magic != MAGIC) { - throw new IOException("Wrong magic"); + final int magic_00 = in.readInt(); + if (magic_00 == MAGIC_LEGACY) { + setBytecodeVersion(0); + } else { + if (magic_00 != MAGIC_00) { + throw new IOException("Wrong magic"); + } + final int magic_01 = in.readInt(); + if ((magic_01 & 0xFFFF0000) != MAGIC_01) { + throw new IOException("Wrong magic"); + } + final int version = magic_01 & 0x0000FFFF; + if (version > BYTECODE_VERSION) { + throw new IOException("Unsupported bytecode version: " + version); + } + setBytecodeVersion(version); } final ConstantPool constants = new ConstantPool(); constants.read(in); @@ -99,7 +153,7 @@ public class EMFTVMResourceImpl extends ResourceImpl { getContents().add(module); } - private static Module readModule(final DataInputStream in, + private Module readModule(final DataInputStream in, final ConstantPool constants) throws IOException { final Module module = FACTORY.createModule(); module.setName((String)constants.get(in.readInt())); @@ -302,7 +356,7 @@ public class EMFTVMResourceImpl extends ResourceImpl { } } - private static void readRules(final DataInputStream in, + private void readRules(final DataInputStream in, final ConstantPool constants, final EList<Rule> rules) throws IOException { final int rtsize = in.readInt(); for (int i = 0; i < rtsize; i++) { @@ -340,13 +394,16 @@ public class EMFTVMResourceImpl extends ResourceImpl { } } - private static void readInputRuleElements(final DataInputStream in, + private void readInputRuleElements(final DataInputStream in, final ConstantPool constants, final EList<InputRuleElement> elements) throws IOException { final int esize = in.readInt(); for (int i = 0; i < esize; i++) { InputRuleElement ire = FACTORY.createInputRuleElement(); elements.add(ire); readTypedElement(in, constants, ire); + if (getBytecodeVersion() >= 1) { + ire.setMapsToSelf(in.readInt() > 0); + } int iemsize = in.readInt(); final EList<String> models = ire.getModels(); for (int j = 0; j < iemsize; j++) { @@ -404,7 +461,8 @@ public class EMFTVMResourceImpl extends ResourceImpl { protected void doSave(OutputStream outputStream, Map<?, ?> options) throws IOException { final DataOutputStream out = new DataOutputStream(outputStream); - out.writeInt(MAGIC); + out.writeInt(MAGIC_00); + out.writeInt(MAGIC_01 + BYTECODE_VERSION); final Module module = findModule(); final ConstantPool constants = new ConstantPool(); constants.createConstants(module); @@ -643,6 +701,7 @@ public class EMFTVMResourceImpl extends ResourceImpl { out.writeInt(elements.size()); for (InputRuleElement ire : elements) { writeTypedElement(out, constants, ire); + out.writeInt(ire.isMapsToSelf() ? 1 : 0); final EList<String> models = ire.getModels(); out.writeInt(models.size()); for (String model : models) { diff --git a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/OCLOperations.java b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/OCLOperations.java index 91eb129e..2f38f82a 100644 --- a/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/OCLOperations.java +++ b/plugins/org.eclipse.m2m.atl.emftvm/src/org/eclipse/m2m/atl/emftvm/util/OCLOperations.java @@ -76,7 +76,7 @@ public final class OCLOperations { public Object next() { Object next = inner.next(); final SourceElement se = tls.getDefaultSourceElement(next); - if (se != null) { + if (se != null && !se.isMapsToSelf()) { final EList<TargetElement> seMapsTo = se.getMapsTo(); if (!seMapsTo.isEmpty()) { assert seMapsTo.get(0).getObject().eResource() != null; @@ -149,7 +149,7 @@ public final class OCLOperations { public Object next() { Object next = inner.next(); final SourceElement se = tr.getUniqueSourceElement(next); - if (se != null) { + if (se != null && !se.isMapsToSelf()) { final EList<TargetElement> seMapsTo = se.getMapsTo(); if (!seMapsTo.isEmpty()) { assert seMapsTo.get(0).getObject().eResource() != null; @@ -537,7 +537,7 @@ public final class OCLOperations { public Object execute(final StackFrame frame) { final Object object = frame.getLocal(0, 0); final SourceElement se = frame.getEnv().getTraces().getDefaultSourceElement(object); - if (se != null) { + if (se != null && !se.isMapsToSelf()) { final EList<TargetElement> seMapsTo = se.getMapsTo(); if (!seMapsTo.isEmpty()) { assert seMapsTo.get(0).getObject().eResource() != null; @@ -563,7 +563,7 @@ public final class OCLOperations { final TracedRule tr = frame.getEnv().getTraces().getLinksByRule(rule, false); if (tr != null) { final SourceElement se = tr.getUniqueSourceElement(object); - if (se != null) { + if (se != null && !se.isMapsToSelf()) { final EList<TargetElement> seMapsTo = se.getMapsTo(); if (!seMapsTo.isEmpty()) { assert seMapsTo.get(0).getObject().eResource() != null; |