diff options
author | wpiers | 2010-03-05 15:42:21 +0000 |
---|---|---|
committer | wpiers | 2010-03-05 15:42:21 +0000 |
commit | 4d4439788604b6347695639715e7ff9048a0b7dc (patch) | |
tree | f23cbb2e02a0c120b6f2ed4c5223dea62c7eee76 /plugins/org.eclipse.m2m.atl.engine.emfvm/src | |
parent | 672b9db4da34bc27bfd143958df722c006244764 (diff) | |
download | org.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')
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$ |