Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwpiers2010-03-05 15:42:21 +0000
committerwpiers2010-03-05 15:42:21 +0000
commit4d4439788604b6347695639715e7ff9048a0b7dc (patch)
treef23cbb2e02a0c120b6f2ed4c5223dea62c7eee76 /plugins/org.eclipse.m2m.atl.engine.emfvm/src
parent672b9db4da34bc27bfd143958df722c006244764 (diff)
downloadorg.eclipse.atl-4d4439788604b6347695639715e7ff9048a0b7dc.tar.gz
org.eclipse.atl-4d4439788604b6347695639715e7ff9048a0b7dc.tar.xz
org.eclipse.atl-4d4439788604b6347695639715e7ff9048a0b7dc.zip
added support for "in" keyword in output patterns
Diffstat (limited to 'plugins/org.eclipse.m2m.atl.engine.emfvm/src')
-rw-r--r--plugins/org.eclipse.m2m.atl.engine.emfvm/src/org/eclipse/m2m/atl/engine/emfvm/ASMOperation.java11
-rw-r--r--plugins/org.eclipse.m2m.atl.engine.emfvm/src/org/eclipse/m2m/atl/engine/emfvm/Bytecode.java10
2 files changed, 17 insertions, 4 deletions
diff --git a/plugins/org.eclipse.m2m.atl.engine.emfvm/src/org/eclipse/m2m/atl/engine/emfvm/ASMOperation.java b/plugins/org.eclipse.m2m.atl.engine.emfvm/src/org/eclipse/m2m/atl/engine/emfvm/ASMOperation.java
index c03b853b..8038588d 100644
--- a/plugins/org.eclipse.m2m.atl.engine.emfvm/src/org/eclipse/m2m/atl/engine/emfvm/ASMOperation.java
+++ b/plugins/org.eclipse.m2m.atl.engine.emfvm/src/org/eclipse/m2m/atl/engine/emfvm/ASMOperation.java
@@ -10,7 +10,7 @@
* Obeo - bag implementation
* Obeo - metamodel method support
*
- * $Id: ASMOperation.java,v 1.33 2010/02/10 16:14:28 wpiers Exp $
+ * $Id: ASMOperation.java,v 1.34 2010/03/05 15:42:22 wpiers Exp $
*******************************************************************************/
package org.eclipse.m2m.atl.engine.emfvm;
@@ -534,6 +534,13 @@ public class ASMOperation extends Operation {
stack[fp++] = execEnv.newElement(frame, ec, mname.toString());
}
break;
+ case Bytecode.NEWIN:
+ Object modelName = stack[--fp];
+ mname = stack[--fp];
+ me = stack[--fp];
+ Object ec = ExecEnv.findMetaElement(frame, mname, me);
+ stack[fp++] = execEnv.newElementIn(frame, ec, modelName.toString());
+ break;
case Bytecode.FINDME:
mname = stack[--fp];
me = stack[--fp];
@@ -546,7 +553,7 @@ public class ASMOperation extends Operation {
"ASMOperation.CANNOTFIND", mname, me)); //$NON-NLS-1$
}
} else {
- Object ec = ExecEnv.findMetaElement(frame, mname, me);
+ ec = ExecEnv.findMetaElement(frame, mname, me);
stack[fp++] = ec;
}
break;
diff --git a/plugins/org.eclipse.m2m.atl.engine.emfvm/src/org/eclipse/m2m/atl/engine/emfvm/Bytecode.java b/plugins/org.eclipse.m2m.atl.engine.emfvm/src/org/eclipse/m2m/atl/engine/emfvm/Bytecode.java
index 5e2fc2d2..c811e135 100644
--- a/plugins/org.eclipse.m2m.atl.engine.emfvm/src/org/eclipse/m2m/atl/engine/emfvm/Bytecode.java
+++ b/plugins/org.eclipse.m2m.atl.engine.emfvm/src/org/eclipse/m2m/atl/engine/emfvm/Bytecode.java
@@ -41,7 +41,7 @@ public class Bytecode {
/** Store value into local variable. */
public static final int STORE = 7;
- /** Call a method. */
+ /** Creates a new element. */
public static final int NEW = 8;
/** Delimitate the beginning of iteration on collection elements. */
@@ -85,7 +85,10 @@ public class Bytecode {
/** Call a procedure (i.e., an operation with no returned value). */
public static final int PCALL = 22;
-
+
+ /** Creates a new element in the specified model. */
+ public static final int NEWIN = 23;
+
/** List of codes. */
public static final String[] OPCODENAMES = {"push", //$NON-NLS-1$
"pushi", //$NON-NLS-1$
@@ -110,6 +113,7 @@ public class Bytecode {
"dup_x1", //$NON-NLS-1$
"delete", //$NON-NLS-1$
"pcall", //$NON-NLS-1$
+ "newin", //$NON-NLS-1$
};
/** current code. */
@@ -142,6 +146,8 @@ public class Bytecode {
this.opcode = PUSHF;
} else if (opcode.equals("new")) { //$NON-NLS-1$
this.opcode = NEW;
+ } else if (opcode.equals("newin")) { //$NON-NLS-1$
+ this.opcode = NEWIN;
} else if (opcode.equals("iterate")) { //$NON-NLS-1$
this.opcode = ITERATE;
} else if (opcode.equals("enditerate")) { //$NON-NLS-1$

Back to the top