Quellcode durchsuchen

sum() built-in function disabled. Break condition added to IterationCall.

au@andreasunger.net vor 14 Jahren
Ursprung
Commit
25f9259763
23 geänderte Dateien mit 3909 neuen und 3144 gelöschten Zeilen
  1. 1 3
      plugins/org.eclipselabs.mscript.codegen.c/src/org/eclipselabs/mscript/codegen/c/BuiltinFunctionGeneratorLookupTable.java
  2. 3 0
      plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/AbstractMscriptProposalProvider.java
  3. 3 1
      plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/MscriptParser.java
  4. 122 13
      plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g
  5. 40 40
      plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscriptLexer.java
  6. 2483 2182
      plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscriptParser.java
  7. 8 8
      plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript__.g
  8. 2 0
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/Mscript.ecore
  9. 1 0
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/Mscript.genmodel
  10. 6 0
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/Mscript.xmi
  11. 30 2
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/ast/AstPackage.java
  12. 27 0
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/ast/IterationCall.java
  13. 13 1
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/ast/impl/AstPackageImpl.java
  14. 71 0
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/ast/impl/IterationCallImpl.java
  15. 110 16
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parseTreeConstruction/MscriptParsetreeConstructor.java
  16. 33 5
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g
  17. 40 40
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscriptLexer.java
  18. 863 794
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscriptParser.java
  19. 8 8
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript__.g
  20. 27 11
      plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/services/MscriptGrammarAccess.java
  21. 1 1
      plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/Mscript.xtext
  22. 16 18
      plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/il/util/BuiltinFunctionDescriptor.java
  23. 1 1
      plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/interpreter/BuiltinFunctionLookupTable.java

+ 1 - 3
plugins/org.eclipselabs.mscript.codegen.c/src/org/eclipselabs/mscript/codegen/c/BuiltinFunctionGeneratorLookupTable.java

@@ -14,8 +14,6 @@ package org.eclipselabs.mscript.codegen.c;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipselabs.mscript.language.il.util.BuiltinFunctionDescriptor;
-
 /**
  * @author Andreas Unger
  *
@@ -25,7 +23,7 @@ public class BuiltinFunctionGeneratorLookupTable {
 	private Map<String, IFunctionGenerator> functionGenerators = new HashMap<String, IFunctionGenerator>();
 	
 	{
-		functionGenerators.put(BuiltinFunctionDescriptor.SUM.getName(), new SumFunctionGenerator());
+//		functionGenerators.put(BuiltinFunctionDescriptor.SUM.getName(), new SumFunctionGenerator());
 	}
 	
 	/**

+ 3 - 0
plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/AbstractMscriptProposalProvider.java

@@ -305,6 +305,9 @@ public class AbstractMscriptProposalProvider extends AbstractJavaBasedContentPro
 	public void completeIterationCall_Accumulator(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
+	public void completeIterationCall_BreakCondition(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
 	public void completeIterationCall_Expression(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}

+ 3 - 1
plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/MscriptParser.java

@@ -161,6 +161,7 @@ public class MscriptParser extends AbstractContentAssistParser {
 					put(grammarAccess.getIterationCallAccess().getGroup(), "rule__IterationCall__Group__0");
 					put(grammarAccess.getIterationCallAccess().getGroup_4(), "rule__IterationCall__Group_4__0");
 					put(grammarAccess.getIterationCallAccess().getGroup_5(), "rule__IterationCall__Group_5__0");
+					put(grammarAccess.getIterationCallAccess().getGroup_6(), "rule__IterationCall__Group_6__0");
 					put(grammarAccess.getIterationAccumulatorAccess().getGroup(), "rule__IterationAccumulator__Group__0");
 					put(grammarAccess.getArrayConstructionOperatorAccess().getGroup(), "rule__ArrayConstructionOperator__Group__0");
 					put(grammarAccess.getArrayConstructionOperatorAccess().getGroup_2_0(), "rule__ArrayConstructionOperator__Group_2_0__0");
@@ -304,7 +305,8 @@ public class MscriptParser extends AbstractContentAssistParser {
 					put(grammarAccess.getIterationCallAccess().getVariablesAssignment_3(), "rule__IterationCall__VariablesAssignment_3");
 					put(grammarAccess.getIterationCallAccess().getVariablesAssignment_4_1(), "rule__IterationCall__VariablesAssignment_4_1");
 					put(grammarAccess.getIterationCallAccess().getAccumulatorAssignment_5_1(), "rule__IterationCall__AccumulatorAssignment_5_1");
-					put(grammarAccess.getIterationCallAccess().getExpressionAssignment_7(), "rule__IterationCall__ExpressionAssignment_7");
+					put(grammarAccess.getIterationCallAccess().getBreakConditionAssignment_6_1(), "rule__IterationCall__BreakConditionAssignment_6_1");
+					put(grammarAccess.getIterationCallAccess().getExpressionAssignment_8(), "rule__IterationCall__ExpressionAssignment_8");
 					put(grammarAccess.getIterationVariableAccess().getNameAssignment(), "rule__IterationVariable__NameAssignment");
 					put(grammarAccess.getIterationAccumulatorAccess().getNameAssignment_0(), "rule__IterationAccumulator__NameAssignment_0");
 					put(grammarAccess.getIterationAccumulatorAccess().getInitializerAssignment_2(), "rule__IterationAccumulator__InitializerAssignment_2");

+ 122 - 13
plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g

@@ -12418,11 +12418,9 @@ rule__IterationCall__Group__6__Impl
     }
 :
 (
-{ before(grammarAccess.getIterationCallAccess().getVerticalLineKeyword_6()); }
-
-	'|' 
-
-{ after(grammarAccess.getIterationCallAccess().getVerticalLineKeyword_6()); }
+{ before(grammarAccess.getIterationCallAccess().getGroup_6()); }
+(rule__IterationCall__Group_6__0)?
+{ after(grammarAccess.getIterationCallAccess().getGroup_6()); }
 )
 
 ;
@@ -12449,9 +12447,11 @@ rule__IterationCall__Group__7__Impl
     }
 :
 (
-{ before(grammarAccess.getIterationCallAccess().getExpressionAssignment_7()); }
-(rule__IterationCall__ExpressionAssignment_7)
-{ after(grammarAccess.getIterationCallAccess().getExpressionAssignment_7()); }
+{ before(grammarAccess.getIterationCallAccess().getVerticalLineKeyword_7()); }
+
+	'|' 
+
+{ after(grammarAccess.getIterationCallAccess().getVerticalLineKeyword_7()); }
 )
 
 ;
@@ -12466,6 +12466,7 @@ rule__IterationCall__Group__8
     }
 :
 	rule__IterationCall__Group__8__Impl
+	rule__IterationCall__Group__9
 ;
 finally {
 	restoreStackSize(stackSize);
@@ -12477,11 +12478,39 @@ rule__IterationCall__Group__8__Impl
     }
 :
 (
-{ before(grammarAccess.getIterationCallAccess().getRightParenthesisKeyword_8()); }
+{ before(grammarAccess.getIterationCallAccess().getExpressionAssignment_8()); }
+(rule__IterationCall__ExpressionAssignment_8)
+{ after(grammarAccess.getIterationCallAccess().getExpressionAssignment_8()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__IterationCall__Group__9
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__IterationCall__Group__9__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterationCall__Group__9__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIterationCallAccess().getRightParenthesisKeyword_9()); }
 
 	')' 
 
-{ after(grammarAccess.getIterationCallAccess().getRightParenthesisKeyword_8()); }
+{ after(grammarAccess.getIterationCallAccess().getRightParenthesisKeyword_9()); }
 )
 
 ;
@@ -12506,6 +12535,8 @@ finally {
 
 
 
+
+
 
 
 rule__IterationCall__Group_4__0
@@ -12634,6 +12665,69 @@ finally {
 
 
 
+rule__IterationCall__Group_6__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__IterationCall__Group_6__0__Impl
+	rule__IterationCall__Group_6__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterationCall__Group_6__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIterationCallAccess().getSemicolonKeyword_6_0()); }
+
+	';' 
+
+{ after(grammarAccess.getIterationCallAccess().getSemicolonKeyword_6_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__IterationCall__Group_6__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__IterationCall__Group_6__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterationCall__Group_6__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIterationCallAccess().getBreakConditionAssignment_6_1()); }
+(rule__IterationCall__BreakConditionAssignment_6_1)
+{ after(grammarAccess.getIterationCallAccess().getBreakConditionAssignment_6_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
 rule__IterationAccumulator__Group__0
     @init {
 		int stackSize = keepStackSize();
@@ -16523,14 +16617,29 @@ finally {
 	restoreStackSize(stackSize);
 }
 
-rule__IterationCall__ExpressionAssignment_7
+rule__IterationCall__BreakConditionAssignment_6_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIterationCallAccess().getBreakConditionExpressionParserRuleCall_6_1_0()); }
+	ruleExpression{ after(grammarAccess.getIterationCallAccess().getBreakConditionExpressionParserRuleCall_6_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterationCall__ExpressionAssignment_8
     @init {
 		int stackSize = keepStackSize();
     }
 :
 (
-{ before(grammarAccess.getIterationCallAccess().getExpressionExpressionParserRuleCall_7_0()); }
-	ruleExpression{ after(grammarAccess.getIterationCallAccess().getExpressionExpressionParserRuleCall_7_0()); }
+{ before(grammarAccess.getIterationCallAccess().getExpressionExpressionParserRuleCall_8_0()); }
+	ruleExpression{ after(grammarAccess.getIterationCallAccess().getExpressionExpressionParserRuleCall_8_0()); }
 )
 
 ;

+ 40 - 40
plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscriptLexer.java

@@ -1330,8 +1330,8 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_ID() throws RecognitionException {
         try {
             int _type = RULE_ID;
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17000:9: ( ( '_' | 'a' .. 'z' | 'A' .. 'Z' ) ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )* )
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17000:11: ( '_' | 'a' .. 'z' | 'A' .. 'Z' ) ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )*
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17109:9: ( ( '_' | 'a' .. 'z' | 'A' .. 'Z' ) ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )* )
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17109:11: ( '_' | 'a' .. 'z' | 'A' .. 'Z' ) ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )*
             {
             if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
                 input.consume();
@@ -1343,7 +1343,7 @@ public class InternalMscriptLexer extends Lexer {
                 recover(mse);    throw mse;
             }
 
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17000:35: ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )*
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17109:35: ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )*
             loop1:
             do {
                 int alt1=2;
@@ -1391,11 +1391,11 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_STRING() throws RecognitionException {
         try {
             int _type = RULE_STRING;
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17002:13: ( '\"' (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )* '\"' )
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17002:15: '\"' (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )* '\"'
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17111:13: ( '\"' (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )* '\"' )
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17111:15: '\"' (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )* '\"'
             {
             match('\"'); 
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17002:19: (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )*
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17111:19: (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )*
             loop2:
             do {
                 int alt2=3;
@@ -1411,7 +1411,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt2) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17002:20: ~ ( ( '\\\\' | '\"' ) )
+            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17111:20: ~ ( ( '\\\\' | '\"' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
             	        input.consume();
@@ -1427,7 +1427,7 @@ public class InternalMscriptLexer extends Lexer {
             	    }
             	    break;
             	case 2 :
-            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17002:34: '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' )
+            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17111:34: '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' )
             	    {
             	    match('\\'); 
             	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='?'||input.LA(1)=='\\'||(input.LA(1)>='a' && input.LA(1)<='b')||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t'||input.LA(1)=='v' ) {
@@ -1464,10 +1464,10 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_REAL() throws RecognitionException {
         try {
             int _type = RULE_REAL;
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17004:11: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )? )
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17004:13: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )?
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17113:11: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )? )
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17113:13: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )?
             {
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17004:13: ( '0' .. '9' )+
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17113:13: ( '0' .. '9' )+
             int cnt3=0;
             loop3:
             do {
@@ -1481,7 +1481,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt3) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17004:14: '0' .. '9'
+            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17113:14: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -1498,7 +1498,7 @@ public class InternalMscriptLexer extends Lexer {
             } while (true);
 
             match('.'); 
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17004:29: ( '0' .. '9' )*
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17113:29: ( '0' .. '9' )*
             loop4:
             do {
                 int alt4=2;
@@ -1511,7 +1511,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt4) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17004:30: '0' .. '9'
+            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17113:30: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -1523,7 +1523,7 @@ public class InternalMscriptLexer extends Lexer {
                 }
             } while (true);
 
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17004:41: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )?
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17113:41: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -1532,7 +1532,7 @@ public class InternalMscriptLexer extends Lexer {
             }
             switch (alt7) {
                 case 1 :
-                    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17004:42: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
+                    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17113:42: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
                     {
                     if ( input.LA(1)=='E'||input.LA(1)=='e' ) {
                         input.consume();
@@ -1544,7 +1544,7 @@ public class InternalMscriptLexer extends Lexer {
                         recover(mse);    throw mse;
                     }
 
-                    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17004:52: ( '+' | '-' )?
+                    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17113:52: ( '+' | '-' )?
                     int alt5=2;
                     int LA5_0 = input.LA(1);
 
@@ -1571,7 +1571,7 @@ public class InternalMscriptLexer extends Lexer {
 
                     }
 
-                    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17004:63: ( '0' .. '9' )+
+                    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17113:63: ( '0' .. '9' )+
                     int cnt6=0;
                     loop6:
                     do {
@@ -1585,7 +1585,7 @@ public class InternalMscriptLexer extends Lexer {
 
                         switch (alt6) {
                     	case 1 :
-                    	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17004:64: '0' .. '9'
+                    	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17113:64: '0' .. '9'
                     	    {
                     	    matchRange('0','9'); 
 
@@ -1621,10 +1621,10 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_INTEGER() throws RecognitionException {
         try {
             int _type = RULE_INTEGER;
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17006:14: ( ( '0' .. '9' )+ )
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17006:16: ( '0' .. '9' )+
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17115:14: ( ( '0' .. '9' )+ )
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17115:16: ( '0' .. '9' )+
             {
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17006:16: ( '0' .. '9' )+
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17115:16: ( '0' .. '9' )+
             int cnt8=0;
             loop8:
             do {
@@ -1638,7 +1638,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt8) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17006:17: '0' .. '9'
+            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17115:17: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -1668,12 +1668,12 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_ML_COMMENT() throws RecognitionException {
         try {
             int _type = RULE_ML_COMMENT;
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17008:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17008:19: '/*' ( options {greedy=false; } : . )* '*/'
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17117:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17117:19: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); 
 
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17008:24: ( options {greedy=false; } : . )*
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17117:24: ( options {greedy=false; } : . )*
             loop9:
             do {
                 int alt9=2;
@@ -1698,7 +1698,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt9) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17008:52: .
+            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17117:52: .
             	    {
             	    matchAny(); 
 
@@ -1726,12 +1726,12 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_SL_COMMENT() throws RecognitionException {
         try {
             int _type = RULE_SL_COMMENT;
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17010:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17010:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17119:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17119:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//"); 
 
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17010:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17119:24: (~ ( ( '\\n' | '\\r' ) ) )*
             loop10:
             do {
                 int alt10=2;
@@ -1744,7 +1744,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt10) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17010:24: ~ ( ( '\\n' | '\\r' ) )
+            	    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17119:24: ~ ( ( '\\n' | '\\r' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFE') ) {
             	        input.consume();
@@ -1765,7 +1765,7 @@ public class InternalMscriptLexer extends Lexer {
                 }
             } while (true);
 
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17010:40: ( ( '\\r' )? '\\n' )?
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17119:40: ( ( '\\r' )? '\\n' )?
             int alt12=2;
             int LA12_0 = input.LA(1);
 
@@ -1774,9 +1774,9 @@ public class InternalMscriptLexer extends Lexer {
             }
             switch (alt12) {
                 case 1 :
-                    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17010:41: ( '\\r' )? '\\n'
+                    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17119:41: ( '\\r' )? '\\n'
                     {
-                    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17010:41: ( '\\r' )?
+                    // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17119:41: ( '\\r' )?
                     int alt11=2;
                     int LA11_0 = input.LA(1);
 
@@ -1785,7 +1785,7 @@ public class InternalMscriptLexer extends Lexer {
                     }
                     switch (alt11) {
                         case 1 :
-                            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17010:41: '\\r'
+                            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17119:41: '\\r'
                             {
                             match('\r'); 
 
@@ -1815,10 +1815,10 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_WS() throws RecognitionException {
         try {
             int _type = RULE_WS;
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17012:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17012:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17121:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17121:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17012:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17121:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt13=0;
             loop13:
             do {
@@ -1871,8 +1871,8 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_ANY_OTHER() throws RecognitionException {
         try {
             int _type = RULE_ANY_OTHER;
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17014:16: ( . )
-            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17014:18: .
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17123:16: ( . )
+            // ../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g:17123:18: .
             {
             matchAny(); 
 

Datei-Diff unterdrückt, da er zu groß ist
+ 2483 - 2182
plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscriptParser.java


+ 8 - 8
plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript__.g

@@ -74,28 +74,28 @@ T75 : 'end' ;
 T76 : 'stateful' ;
 T77 : 'static' ;
 
-// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17000
+// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17109
 RULE_ID : ('_'|'a'..'z'|'A'..'Z') ('0'..'9'|'_'|'a'..'z'|'A'..'Z')*;
 
-// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17002
+// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17111
 RULE_STRING : '"' (~(('\\'|'"'))|'\\' ('\''|'"'|'?'|'\\'|'a'|'b'|'f'|'n'|'r'|'t'|'v'))* '"';
 
-// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17004
+// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17113
 RULE_REAL : ('0'..'9')+ '.' ('0'..'9')* (('e'|'E') ('+'|'-')? ('0'..'9')+)?;
 
-// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17006
+// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17115
 RULE_INTEGER : ('0'..'9')+;
 
-// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17008
+// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17117
 RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
 
-// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17010
+// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17119
 RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
 
-// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17012
+// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17121
 RULE_WS : (' '|'\t'|'\r'|'\n')+;
 
-// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17014
+// $ANTLR src "../org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g" 17123
 RULE_ANY_OTHER : .;
 
 

+ 2 - 0
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/Mscript.ecore

@@ -227,6 +227,8 @@
         eType="#//IterationVariable" containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="accumulator" eType="#//IterationAccumulator"
         containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="breakCondition" eType="#//Expression"
+        containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
         containment="true"/>
   </eClassifiers>

+ 1 - 0
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/Mscript.genmodel

@@ -191,6 +191,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Mscript.ecore#//IterationCall/name"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Mscript.ecore#//IterationCall/variables"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Mscript.ecore#//IterationCall/accumulator"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Mscript.ecore#//IterationCall/breakCondition"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Mscript.ecore#//IterationCall/expression"/>
     </genClasses>
     <genClasses ecoreClass="Mscript.ecore#//IterationVariable">

+ 6 - 0
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/Mscript.xmi

@@ -1300,6 +1300,12 @@
           <terminal xsi:type="xtext:RuleCall" rule="//@rules.70"/>
         </elements>
       </elements>
+      <elements xsi:type="xtext:Group" cardinality="?">
+        <elements xsi:type="xtext:Keyword" value=";"/>
+        <elements xsi:type="xtext:Assignment" feature="breakCondition" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.26"/>
+        </elements>
+      </elements>
       <elements xsi:type="xtext:Keyword" value="|"/>
       <elements xsi:type="xtext:Assignment" feature="expression" operator="=">
         <terminal xsi:type="xtext:RuleCall" rule="//@rules.26"/>

+ 30 - 2
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/ast/AstPackage.java

@@ -1671,6 +1671,15 @@ public interface AstPackage extends EPackage
    */
   int ITERATION_CALL__ACCUMULATOR = FEATURE_CALL_PART_FEATURE_COUNT + 2;
 
+  /**
+   * The feature id for the '<em><b>Break Condition</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ITERATION_CALL__BREAK_CONDITION = FEATURE_CALL_PART_FEATURE_COUNT + 3;
+
   /**
    * The feature id for the '<em><b>Expression</b></em>' containment reference.
    * <!-- begin-user-doc -->
@@ -1678,7 +1687,7 @@ public interface AstPackage extends EPackage
    * @generated
    * @ordered
    */
-  int ITERATION_CALL__EXPRESSION = FEATURE_CALL_PART_FEATURE_COUNT + 3;
+  int ITERATION_CALL__EXPRESSION = FEATURE_CALL_PART_FEATURE_COUNT + 4;
 
   /**
    * The number of structural features of the '<em>Iteration Call</em>' class.
@@ -1687,7 +1696,7 @@ public interface AstPackage extends EPackage
    * @generated
    * @ordered
    */
-  int ITERATION_CALL_FEATURE_COUNT = FEATURE_CALL_PART_FEATURE_COUNT + 4;
+  int ITERATION_CALL_FEATURE_COUNT = FEATURE_CALL_PART_FEATURE_COUNT + 5;
 
   /**
    * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.impl.IterationVariableImpl <em>Iteration Variable</em>}' class.
@@ -3925,6 +3934,17 @@ public interface AstPackage extends EPackage
    */
   EReference getIterationCall_Accumulator();
 
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipselabs.mscript.language.ast.IterationCall#getBreakCondition <em>Break Condition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Break Condition</em>'.
+   * @see org.eclipselabs.mscript.language.ast.IterationCall#getBreakCondition()
+   * @see #getIterationCall()
+   * @generated
+   */
+  EReference getIterationCall_BreakCondition();
+
   /**
    * Returns the meta object for the containment reference '{@link org.eclipselabs.mscript.language.ast.IterationCall#getExpression <em>Expression</em>}'.
    * <!-- begin-user-doc -->
@@ -5831,6 +5851,14 @@ public interface AstPackage extends EPackage
      */
     EReference ITERATION_CALL__ACCUMULATOR = eINSTANCE.getIterationCall_Accumulator();
 
+    /**
+     * The meta object literal for the '<em><b>Break Condition</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ITERATION_CALL__BREAK_CONDITION = eINSTANCE.getIterationCall_BreakCondition();
+
     /**
      * The meta object literal for the '<em><b>Expression</b></em>' containment reference feature.
      * <!-- begin-user-doc -->

+ 27 - 0
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/ast/IterationCall.java

@@ -18,6 +18,7 @@ import org.eclipse.emf.common.util.EList;
  *   <li>{@link org.eclipselabs.mscript.language.ast.IterationCall#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipselabs.mscript.language.ast.IterationCall#getVariables <em>Variables</em>}</li>
  *   <li>{@link org.eclipselabs.mscript.language.ast.IterationCall#getAccumulator <em>Accumulator</em>}</li>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.IterationCall#getBreakCondition <em>Break Condition</em>}</li>
  *   <li>{@link org.eclipselabs.mscript.language.ast.IterationCall#getExpression <em>Expression</em>}</li>
  * </ul>
  * </p>
@@ -96,6 +97,32 @@ public interface IterationCall extends FeatureCallPart
    */
   void setAccumulator(IterationAccumulator value);
 
+  /**
+   * Returns the value of the '<em><b>Break Condition</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Break Condition</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Break Condition</em>' containment reference.
+   * @see #setBreakCondition(Expression)
+   * @see org.eclipselabs.mscript.language.ast.AstPackage#getIterationCall_BreakCondition()
+   * @model containment="true"
+   * @generated
+   */
+  Expression getBreakCondition();
+
+  /**
+   * Sets the value of the '{@link org.eclipselabs.mscript.language.ast.IterationCall#getBreakCondition <em>Break Condition</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Break Condition</em>' containment reference.
+   * @see #getBreakCondition()
+   * @generated
+   */
+  void setBreakCondition(Expression value);
+
   /**
    * Returns the value of the '<em><b>Expression</b></em>' containment reference.
    * <!-- begin-user-doc -->

+ 13 - 1
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/ast/impl/AstPackageImpl.java

@@ -1844,11 +1844,21 @@ public class AstPackageImpl extends EPackageImpl implements AstPackage
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getIterationCall_Expression()
+  public EReference getIterationCall_BreakCondition()
   {
     return (EReference)iterationCallEClass.getEStructuralFeatures().get(3);
   }
 
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getIterationCall_Expression()
+  {
+    return (EReference)iterationCallEClass.getEStructuralFeatures().get(4);
+  }
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -2901,6 +2911,7 @@ public class AstPackageImpl extends EPackageImpl implements AstPackage
     createEAttribute(iterationCallEClass, ITERATION_CALL__NAME);
     createEReference(iterationCallEClass, ITERATION_CALL__VARIABLES);
     createEReference(iterationCallEClass, ITERATION_CALL__ACCUMULATOR);
+    createEReference(iterationCallEClass, ITERATION_CALL__BREAK_CONDITION);
     createEReference(iterationCallEClass, ITERATION_CALL__EXPRESSION);
 
     iterationVariableEClass = createEClass(ITERATION_VARIABLE);
@@ -3253,6 +3264,7 @@ public class AstPackageImpl extends EPackageImpl implements AstPackage
     initEAttribute(getIterationCall_Name(), ecorePackage.getEString(), "name", null, 0, 1, IterationCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEReference(getIterationCall_Variables(), this.getIterationVariable(), null, "variables", null, 0, -1, IterationCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEReference(getIterationCall_Accumulator(), this.getIterationAccumulator(), null, "accumulator", null, 0, 1, IterationCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getIterationCall_BreakCondition(), this.getExpression(), null, "breakCondition", null, 0, 1, IterationCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEReference(getIterationCall_Expression(), this.getExpression(), null, "expression", null, 0, 1, IterationCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
     initEClass(iterationVariableEClass, IterationVariable.class, "IterationVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+ 71 - 0
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/ast/impl/IterationCallImpl.java

@@ -36,6 +36,7 @@ import org.eclipselabs.mscript.language.ast.IterationVariable;
  *   <li>{@link org.eclipselabs.mscript.language.ast.impl.IterationCallImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipselabs.mscript.language.ast.impl.IterationCallImpl#getVariables <em>Variables</em>}</li>
  *   <li>{@link org.eclipselabs.mscript.language.ast.impl.IterationCallImpl#getAccumulator <em>Accumulator</em>}</li>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.impl.IterationCallImpl#getBreakCondition <em>Break Condition</em>}</li>
  *   <li>{@link org.eclipselabs.mscript.language.ast.impl.IterationCallImpl#getExpression <em>Expression</em>}</li>
  * </ul>
  * </p>
@@ -84,6 +85,16 @@ public class IterationCallImpl extends FeatureCallPartImpl implements IterationC
    */
   protected IterationAccumulator accumulator;
 
+  /**
+   * The cached value of the '{@link #getBreakCondition() <em>Break Condition</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getBreakCondition()
+   * @generated
+   * @ordered
+   */
+  protected Expression breakCondition;
+
   /**
    * The cached value of the '{@link #getExpression() <em>Expression</em>}' containment reference.
    * <!-- begin-user-doc -->
@@ -200,6 +211,54 @@ public class IterationCallImpl extends FeatureCallPartImpl implements IterationC
       eNotify(new ENotificationImpl(this, Notification.SET, AstPackage.ITERATION_CALL__ACCUMULATOR, newAccumulator, newAccumulator));
   }
 
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression getBreakCondition()
+  {
+    return breakCondition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetBreakCondition(Expression newBreakCondition, NotificationChain msgs)
+  {
+    Expression oldBreakCondition = breakCondition;
+    breakCondition = newBreakCondition;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, AstPackage.ITERATION_CALL__BREAK_CONDITION, oldBreakCondition, newBreakCondition);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setBreakCondition(Expression newBreakCondition)
+  {
+    if (newBreakCondition != breakCondition)
+    {
+      NotificationChain msgs = null;
+      if (breakCondition != null)
+        msgs = ((InternalEObject)breakCondition).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - AstPackage.ITERATION_CALL__BREAK_CONDITION, null, msgs);
+      if (newBreakCondition != null)
+        msgs = ((InternalEObject)newBreakCondition).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - AstPackage.ITERATION_CALL__BREAK_CONDITION, null, msgs);
+      msgs = basicSetBreakCondition(newBreakCondition, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, AstPackage.ITERATION_CALL__BREAK_CONDITION, newBreakCondition, newBreakCondition));
+  }
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -262,6 +321,8 @@ public class IterationCallImpl extends FeatureCallPartImpl implements IterationC
         return ((InternalEList<?>)getVariables()).basicRemove(otherEnd, msgs);
       case AstPackage.ITERATION_CALL__ACCUMULATOR:
         return basicSetAccumulator(null, msgs);
+      case AstPackage.ITERATION_CALL__BREAK_CONDITION:
+        return basicSetBreakCondition(null, msgs);
       case AstPackage.ITERATION_CALL__EXPRESSION:
         return basicSetExpression(null, msgs);
     }
@@ -284,6 +345,8 @@ public class IterationCallImpl extends FeatureCallPartImpl implements IterationC
         return getVariables();
       case AstPackage.ITERATION_CALL__ACCUMULATOR:
         return getAccumulator();
+      case AstPackage.ITERATION_CALL__BREAK_CONDITION:
+        return getBreakCondition();
       case AstPackage.ITERATION_CALL__EXPRESSION:
         return getExpression();
     }
@@ -311,6 +374,9 @@ public class IterationCallImpl extends FeatureCallPartImpl implements IterationC
       case AstPackage.ITERATION_CALL__ACCUMULATOR:
         setAccumulator((IterationAccumulator)newValue);
         return;
+      case AstPackage.ITERATION_CALL__BREAK_CONDITION:
+        setBreakCondition((Expression)newValue);
+        return;
       case AstPackage.ITERATION_CALL__EXPRESSION:
         setExpression((Expression)newValue);
         return;
@@ -337,6 +403,9 @@ public class IterationCallImpl extends FeatureCallPartImpl implements IterationC
       case AstPackage.ITERATION_CALL__ACCUMULATOR:
         setAccumulator((IterationAccumulator)null);
         return;
+      case AstPackage.ITERATION_CALL__BREAK_CONDITION:
+        setBreakCondition((Expression)null);
+        return;
       case AstPackage.ITERATION_CALL__EXPRESSION:
         setExpression((Expression)null);
         return;
@@ -360,6 +429,8 @@ public class IterationCallImpl extends FeatureCallPartImpl implements IterationC
         return variables != null && !variables.isEmpty();
       case AstPackage.ITERATION_CALL__ACCUMULATOR:
         return accumulator != null;
+      case AstPackage.ITERATION_CALL__BREAK_CONDITION:
+        return breakCondition != null;
       case AstPackage.ITERATION_CALL__EXPRESSION:
         return expression != null;
     }

+ 110 - 16
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parseTreeConstruction/MscriptParsetreeConstructor.java

@@ -13681,12 +13681,12 @@ protected class OperationArgumentList_RightParenthesisKeyword_3 extends KeywordT
  *
  * IterationCall:
  * 	"." name=ID "(" variables+=IterationVariable ("," variables+=IterationVariable)* (";"
- * 	accumulator=IterationAccumulator)? "|" expression=Expression ")";
+ * 	accumulator=IterationAccumulator)? (";" breakCondition=Expression)? "|" expression=Expression ")";
  *
  **/
 
 // "." name=ID "(" variables+=IterationVariable ("," variables+=IterationVariable)* (";" accumulator=IterationAccumulator)?
-// "|" expression=Expression ")"
+// (";" breakCondition=Expression)? "|" expression=Expression ")"
 protected class IterationCall_Group extends GroupToken {
 	
 	public IterationCall_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
@@ -13701,7 +13701,7 @@ protected class IterationCall_Group extends GroupToken {
     @Override
 	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
 		switch(index) {
-			case 0: return new IterationCall_RightParenthesisKeyword_8(lastRuleCallOrigin, this, 0, inst);
+			case 0: return new IterationCall_RightParenthesisKeyword_9(lastRuleCallOrigin, this, 0, inst);
 			default: return null;
 		}	
 	}
@@ -14022,16 +14022,38 @@ protected class IterationCall_AccumulatorAssignment_5_1 extends AssignmentToken
 }
 
 
-// "|"
-protected class IterationCall_VerticalLineKeyword_6 extends KeywordToken  {
+// (";" breakCondition=Expression)?
+protected class IterationCall_Group_6 extends GroupToken {
+	
+	public IterationCall_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getIterationCallAccess().getGroup_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new IterationCall_BreakConditionAssignment_6_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ";"
+protected class IterationCall_SemicolonKeyword_6_0 extends KeywordToken  {
 	
-	public IterationCall_VerticalLineKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+	public IterationCall_SemicolonKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
 		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
 	}
 	
 	@Override
 	public Keyword getGrammarElement() {
-		return grammarAccess.getIterationCallAccess().getVerticalLineKeyword_6();
+		return grammarAccess.getIterationCallAccess().getSemicolonKeyword_6_0();
 	}
 
     @Override
@@ -14046,16 +14068,88 @@ protected class IterationCall_VerticalLineKeyword_6 extends KeywordToken  {
 
 }
 
+// breakCondition=Expression
+protected class IterationCall_BreakConditionAssignment_6_1 extends AssignmentToken  {
+	
+	public IterationCall_BreakConditionAssignment_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getIterationCallAccess().getBreakConditionAssignment_6_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Expression_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("breakCondition",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("breakCondition");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getIterationCallAccess().getBreakConditionExpressionParserRuleCall_6_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new IterationCall_SemicolonKeyword_6_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "|"
+protected class IterationCall_VerticalLineKeyword_7 extends KeywordToken  {
+	
+	public IterationCall_VerticalLineKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getIterationCallAccess().getVerticalLineKeyword_7();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new IterationCall_Group_6(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new IterationCall_Group_5(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new IterationCall_Group_4(lastRuleCallOrigin, this, 2, inst);
+			case 3: return new IterationCall_VariablesAssignment_3(lastRuleCallOrigin, this, 3, inst);
+			default: return null;
+		}	
+	}
+
+}
+
 // expression=Expression
-protected class IterationCall_ExpressionAssignment_7 extends AssignmentToken  {
+protected class IterationCall_ExpressionAssignment_8 extends AssignmentToken  {
 	
-	public IterationCall_ExpressionAssignment_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+	public IterationCall_ExpressionAssignment_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
 		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
 	}
 	
 	@Override
 	public Assignment getGrammarElement() {
-		return grammarAccess.getIterationCallAccess().getExpressionAssignment_7();
+		return grammarAccess.getIterationCallAccess().getExpressionAssignment_8();
 	}
 
     @Override
@@ -14074,7 +14168,7 @@ protected class IterationCall_ExpressionAssignment_7 extends AssignmentToken  {
 			IEObjectConsumer param = createEObjectConsumer((EObject)value);
 			if(param.isInstanceOf(grammarAccess.getExpressionRule().getType().getClassifier())) {
 				type = AssignmentType.PARSER_RULE_CALL;
-				element = grammarAccess.getIterationCallAccess().getExpressionExpressionParserRuleCall_7_0(); 
+				element = grammarAccess.getIterationCallAccess().getExpressionExpressionParserRuleCall_8_0(); 
 				consumed = obj;
 				return param;
 			}
@@ -14086,28 +14180,28 @@ protected class IterationCall_ExpressionAssignment_7 extends AssignmentToken  {
 	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
 		if(value == inst.getEObject() && !inst.isConsumed()) return null;
 		switch(index) {
-			case 0: return new IterationCall_VerticalLineKeyword_6(lastRuleCallOrigin, next, actIndex, consumed);
+			case 0: return new IterationCall_VerticalLineKeyword_7(lastRuleCallOrigin, next, actIndex, consumed);
 			default: return null;
 		}	
 	}	
 }
 
 // ")"
-protected class IterationCall_RightParenthesisKeyword_8 extends KeywordToken  {
+protected class IterationCall_RightParenthesisKeyword_9 extends KeywordToken  {
 	
-	public IterationCall_RightParenthesisKeyword_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+	public IterationCall_RightParenthesisKeyword_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
 		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
 	}
 	
 	@Override
 	public Keyword getGrammarElement() {
-		return grammarAccess.getIterationCallAccess().getRightParenthesisKeyword_8();
+		return grammarAccess.getIterationCallAccess().getRightParenthesisKeyword_9();
 	}
 
     @Override
 	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
 		switch(index) {
-			case 0: return new IterationCall_ExpressionAssignment_7(lastRuleCallOrigin, this, 0, inst);
+			case 0: return new IterationCall_ExpressionAssignment_8(lastRuleCallOrigin, this, 0, inst);
 			default: return null;
 		}	
 	}

+ 33 - 5
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g

@@ -5411,17 +5411,45 @@ ruleIterationCall returns [EObject current=null]
 	        currentNode = currentNode.getParent();
 	    }
 
+)
+))?(	';' 
+    {
+        createLeafNode(grammarAccess.getIterationCallAccess().getSemicolonKeyword_6_0(), null); 
+    }
+(
+(
+		{ 
+	        currentNode=createCompositeNode(grammarAccess.getIterationCallAccess().getBreakConditionExpressionParserRuleCall_6_1_0(), currentNode); 
+	    }
+		lv_breakCondition_9_0=ruleExpression		{
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getIterationCallRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        try {
+	       		set(
+	       			$current, 
+	       			"breakCondition",
+	        		lv_breakCondition_9_0, 
+	        		"Expression", 
+	        		currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+
 )
 ))?	'|' 
     {
-        createLeafNode(grammarAccess.getIterationCallAccess().getVerticalLineKeyword_6(), null); 
+        createLeafNode(grammarAccess.getIterationCallAccess().getVerticalLineKeyword_7(), null); 
     }
 (
 (
 		{ 
-	        currentNode=createCompositeNode(grammarAccess.getIterationCallAccess().getExpressionExpressionParserRuleCall_7_0(), currentNode); 
+	        currentNode=createCompositeNode(grammarAccess.getIterationCallAccess().getExpressionExpressionParserRuleCall_8_0(), currentNode); 
 	    }
-		lv_expression_9_0=ruleExpression		{
+		lv_expression_11_0=ruleExpression		{
 	        if ($current==null) {
 	            $current = factory.create(grammarAccess.getIterationCallRule().getType().getClassifier());
 	            associateNodeWithAstElement(currentNode.getParent(), $current);
@@ -5430,7 +5458,7 @@ ruleIterationCall returns [EObject current=null]
 	       		set(
 	       			$current, 
 	       			"expression",
-	        		lv_expression_9_0, 
+	        		lv_expression_11_0, 
 	        		"Expression", 
 	        		currentNode);
 	        } catch (ValueConverterException vce) {
@@ -5442,7 +5470,7 @@ ruleIterationCall returns [EObject current=null]
 )
 )	')' 
     {
-        createLeafNode(grammarAccess.getIterationCallAccess().getRightParenthesisKeyword_8(), null); 
+        createLeafNode(grammarAccess.getIterationCallAccess().getRightParenthesisKeyword_9(), null); 
     }
 )
 ;

+ 40 - 40
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscriptLexer.java

@@ -1330,8 +1330,8 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_ID() throws RecognitionException {
         try {
             int _type = RULE_ID;
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6898:9: ( ( '_' | 'a' .. 'z' | 'A' .. 'Z' ) ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )* )
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6898:11: ( '_' | 'a' .. 'z' | 'A' .. 'Z' ) ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )*
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6926:9: ( ( '_' | 'a' .. 'z' | 'A' .. 'Z' ) ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )* )
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6926:11: ( '_' | 'a' .. 'z' | 'A' .. 'Z' ) ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )*
             {
             if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
                 input.consume();
@@ -1343,7 +1343,7 @@ public class InternalMscriptLexer extends Lexer {
                 recover(mse);    throw mse;
             }
 
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6898:35: ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )*
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6926:35: ( '0' .. '9' | '_' | 'a' .. 'z' | 'A' .. 'Z' )*
             loop1:
             do {
                 int alt1=2;
@@ -1391,11 +1391,11 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_STRING() throws RecognitionException {
         try {
             int _type = RULE_STRING;
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6900:13: ( '\"' (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )* '\"' )
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6900:15: '\"' (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )* '\"'
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6928:13: ( '\"' (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )* '\"' )
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6928:15: '\"' (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )* '\"'
             {
             match('\"'); 
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6900:19: (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )*
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6928:19: (~ ( ( '\\\\' | '\"' ) ) | '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' ) )*
             loop2:
             do {
                 int alt2=3;
@@ -1411,7 +1411,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt2) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6900:20: ~ ( ( '\\\\' | '\"' ) )
+            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6928:20: ~ ( ( '\\\\' | '\"' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
             	        input.consume();
@@ -1427,7 +1427,7 @@ public class InternalMscriptLexer extends Lexer {
             	    }
             	    break;
             	case 2 :
-            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6900:34: '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' )
+            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6928:34: '\\\\' ( '\\'' | '\"' | '?' | '\\\\' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' )
             	    {
             	    match('\\'); 
             	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='?'||input.LA(1)=='\\'||(input.LA(1)>='a' && input.LA(1)<='b')||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t'||input.LA(1)=='v' ) {
@@ -1464,10 +1464,10 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_REAL() throws RecognitionException {
         try {
             int _type = RULE_REAL;
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6902:11: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )? )
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6902:13: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )?
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6930:11: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )? )
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6930:13: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )?
             {
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6902:13: ( '0' .. '9' )+
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6930:13: ( '0' .. '9' )+
             int cnt3=0;
             loop3:
             do {
@@ -1481,7 +1481,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt3) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6902:14: '0' .. '9'
+            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6930:14: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -1498,7 +1498,7 @@ public class InternalMscriptLexer extends Lexer {
             } while (true);
 
             match('.'); 
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6902:29: ( '0' .. '9' )*
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6930:29: ( '0' .. '9' )*
             loop4:
             do {
                 int alt4=2;
@@ -1511,7 +1511,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt4) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6902:30: '0' .. '9'
+            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6930:30: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -1523,7 +1523,7 @@ public class InternalMscriptLexer extends Lexer {
                 }
             } while (true);
 
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6902:41: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )?
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6930:41: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -1532,7 +1532,7 @@ public class InternalMscriptLexer extends Lexer {
             }
             switch (alt7) {
                 case 1 :
-                    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6902:42: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
+                    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6930:42: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
                     {
                     if ( input.LA(1)=='E'||input.LA(1)=='e' ) {
                         input.consume();
@@ -1544,7 +1544,7 @@ public class InternalMscriptLexer extends Lexer {
                         recover(mse);    throw mse;
                     }
 
-                    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6902:52: ( '+' | '-' )?
+                    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6930:52: ( '+' | '-' )?
                     int alt5=2;
                     int LA5_0 = input.LA(1);
 
@@ -1571,7 +1571,7 @@ public class InternalMscriptLexer extends Lexer {
 
                     }
 
-                    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6902:63: ( '0' .. '9' )+
+                    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6930:63: ( '0' .. '9' )+
                     int cnt6=0;
                     loop6:
                     do {
@@ -1585,7 +1585,7 @@ public class InternalMscriptLexer extends Lexer {
 
                         switch (alt6) {
                     	case 1 :
-                    	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6902:64: '0' .. '9'
+                    	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6930:64: '0' .. '9'
                     	    {
                     	    matchRange('0','9'); 
 
@@ -1621,10 +1621,10 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_INTEGER() throws RecognitionException {
         try {
             int _type = RULE_INTEGER;
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6904:14: ( ( '0' .. '9' )+ )
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6904:16: ( '0' .. '9' )+
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6932:14: ( ( '0' .. '9' )+ )
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6932:16: ( '0' .. '9' )+
             {
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6904:16: ( '0' .. '9' )+
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6932:16: ( '0' .. '9' )+
             int cnt8=0;
             loop8:
             do {
@@ -1638,7 +1638,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt8) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6904:17: '0' .. '9'
+            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6932:17: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -1668,12 +1668,12 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_ML_COMMENT() throws RecognitionException {
         try {
             int _type = RULE_ML_COMMENT;
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6906:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6906:19: '/*' ( options {greedy=false; } : . )* '*/'
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6934:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6934:19: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); 
 
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6906:24: ( options {greedy=false; } : . )*
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6934:24: ( options {greedy=false; } : . )*
             loop9:
             do {
                 int alt9=2;
@@ -1698,7 +1698,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt9) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6906:52: .
+            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6934:52: .
             	    {
             	    matchAny(); 
 
@@ -1726,12 +1726,12 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_SL_COMMENT() throws RecognitionException {
         try {
             int _type = RULE_SL_COMMENT;
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6908:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6908:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6936:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6936:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//"); 
 
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6908:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6936:24: (~ ( ( '\\n' | '\\r' ) ) )*
             loop10:
             do {
                 int alt10=2;
@@ -1744,7 +1744,7 @@ public class InternalMscriptLexer extends Lexer {
 
                 switch (alt10) {
             	case 1 :
-            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6908:24: ~ ( ( '\\n' | '\\r' ) )
+            	    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6936:24: ~ ( ( '\\n' | '\\r' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFE') ) {
             	        input.consume();
@@ -1765,7 +1765,7 @@ public class InternalMscriptLexer extends Lexer {
                 }
             } while (true);
 
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6908:40: ( ( '\\r' )? '\\n' )?
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6936:40: ( ( '\\r' )? '\\n' )?
             int alt12=2;
             int LA12_0 = input.LA(1);
 
@@ -1774,9 +1774,9 @@ public class InternalMscriptLexer extends Lexer {
             }
             switch (alt12) {
                 case 1 :
-                    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6908:41: ( '\\r' )? '\\n'
+                    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6936:41: ( '\\r' )? '\\n'
                     {
-                    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6908:41: ( '\\r' )?
+                    // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6936:41: ( '\\r' )?
                     int alt11=2;
                     int LA11_0 = input.LA(1);
 
@@ -1785,7 +1785,7 @@ public class InternalMscriptLexer extends Lexer {
                     }
                     switch (alt11) {
                         case 1 :
-                            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6908:41: '\\r'
+                            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6936:41: '\\r'
                             {
                             match('\r'); 
 
@@ -1815,10 +1815,10 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_WS() throws RecognitionException {
         try {
             int _type = RULE_WS;
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6910:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6910:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6938:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6938:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6910:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6938:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt13=0;
             loop13:
             do {
@@ -1871,8 +1871,8 @@ public class InternalMscriptLexer extends Lexer {
     public final void mRULE_ANY_OTHER() throws RecognitionException {
         try {
             int _type = RULE_ANY_OTHER;
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6912:16: ( . )
-            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6912:18: .
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6940:16: ( . )
+            // ../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g:6940:18: .
             {
             matchAny(); 
 

Datei-Diff unterdrückt, da er zu groß ist
+ 863 - 794
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscriptParser.java


+ 8 - 8
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript__.g

@@ -74,28 +74,28 @@ T75 : '\'' ;
 T76 : 'false' ;
 T77 : 'true' ;
 
-// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6898
+// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6926
 RULE_ID : ('_'|'a'..'z'|'A'..'Z') ('0'..'9'|'_'|'a'..'z'|'A'..'Z')*;
 
-// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6900
+// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6928
 RULE_STRING : '"' (~(('\\'|'"'))|'\\' ('\''|'"'|'?'|'\\'|'a'|'b'|'f'|'n'|'r'|'t'|'v'))* '"';
 
-// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6902
+// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6930
 RULE_REAL : ('0'..'9')+ '.' ('0'..'9')* (('e'|'E') ('+'|'-')? ('0'..'9')+)?;
 
-// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6904
+// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6932
 RULE_INTEGER : ('0'..'9')+;
 
-// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6906
+// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6934
 RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
 
-// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6908
+// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6936
 RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
 
-// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6910
+// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6938
 RULE_WS : (' '|'\t'|'\r'|'\n')+;
 
-// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6912
+// $ANTLR src "../org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g" 6940
 RULE_ANY_OTHER : .;
 
 

+ 27 - 11
plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/services/MscriptGrammarAccess.java

@@ -2588,18 +2588,22 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		private final Keyword cSemicolonKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
 		private final Assignment cAccumulatorAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
 		private final RuleCall cAccumulatorIterationAccumulatorParserRuleCall_5_1_0 = (RuleCall)cAccumulatorAssignment_5_1.eContents().get(0);
-		private final Keyword cVerticalLineKeyword_6 = (Keyword)cGroup.eContents().get(6);
-		private final Assignment cExpressionAssignment_7 = (Assignment)cGroup.eContents().get(7);
-		private final RuleCall cExpressionExpressionParserRuleCall_7_0 = (RuleCall)cExpressionAssignment_7.eContents().get(0);
-		private final Keyword cRightParenthesisKeyword_8 = (Keyword)cGroup.eContents().get(8);
+		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
+		private final Keyword cSemicolonKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
+		private final Assignment cBreakConditionAssignment_6_1 = (Assignment)cGroup_6.eContents().get(1);
+		private final RuleCall cBreakConditionExpressionParserRuleCall_6_1_0 = (RuleCall)cBreakConditionAssignment_6_1.eContents().get(0);
+		private final Keyword cVerticalLineKeyword_7 = (Keyword)cGroup.eContents().get(7);
+		private final Assignment cExpressionAssignment_8 = (Assignment)cGroup.eContents().get(8);
+		private final RuleCall cExpressionExpressionParserRuleCall_8_0 = (RuleCall)cExpressionAssignment_8.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_9 = (Keyword)cGroup.eContents().get(9);
 		
 		//IterationCall:
 		//	"." name=ID "(" variables+=IterationVariable ("," variables+=IterationVariable)* (";"
-		//	accumulator=IterationAccumulator)? "|" expression=Expression ")";
+		//	accumulator=IterationAccumulator)? (";" breakCondition=Expression)? "|" expression=Expression ")";
 		public ParserRule getRule() { return rule; }
 
 		//"." name=ID "(" variables+=IterationVariable ("," variables+=IterationVariable)* (";" accumulator=IterationAccumulator)?
-		//"|" expression=Expression ")"
+		//(";" breakCondition=Expression)? "|" expression=Expression ")"
 		public Group getGroup() { return cGroup; }
 
 		//"."
@@ -2644,17 +2648,29 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		//IterationAccumulator
 		public RuleCall getAccumulatorIterationAccumulatorParserRuleCall_5_1_0() { return cAccumulatorIterationAccumulatorParserRuleCall_5_1_0; }
 
+		//(";" breakCondition=Expression)?
+		public Group getGroup_6() { return cGroup_6; }
+
+		//";"
+		public Keyword getSemicolonKeyword_6_0() { return cSemicolonKeyword_6_0; }
+
+		//breakCondition=Expression
+		public Assignment getBreakConditionAssignment_6_1() { return cBreakConditionAssignment_6_1; }
+
+		//Expression
+		public RuleCall getBreakConditionExpressionParserRuleCall_6_1_0() { return cBreakConditionExpressionParserRuleCall_6_1_0; }
+
 		//"|"
-		public Keyword getVerticalLineKeyword_6() { return cVerticalLineKeyword_6; }
+		public Keyword getVerticalLineKeyword_7() { return cVerticalLineKeyword_7; }
 
 		//expression=Expression
-		public Assignment getExpressionAssignment_7() { return cExpressionAssignment_7; }
+		public Assignment getExpressionAssignment_8() { return cExpressionAssignment_8; }
 
 		//Expression
-		public RuleCall getExpressionExpressionParserRuleCall_7_0() { return cExpressionExpressionParserRuleCall_7_0; }
+		public RuleCall getExpressionExpressionParserRuleCall_8_0() { return cExpressionExpressionParserRuleCall_8_0; }
 
 		//")"
-		public Keyword getRightParenthesisKeyword_8() { return cRightParenthesisKeyword_8; }
+		public Keyword getRightParenthesisKeyword_9() { return cRightParenthesisKeyword_9; }
 	}
 
 	public class IterationVariableElements extends AbstractParserRuleElementFinder {
@@ -4377,7 +4393,7 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 
 	//IterationCall:
 	//	"." name=ID "(" variables+=IterationVariable ("," variables+=IterationVariable)* (";"
-	//	accumulator=IterationAccumulator)? "|" expression=Expression ")";
+	//	accumulator=IterationAccumulator)? (";" breakCondition=Expression)? "|" expression=Expression ")";
 	public IterationCallElements getIterationCallAccess() {
 		return (pIterationCall != null) ? pIterationCall : (pIterationCall = new IterationCallElements());
 	}

+ 1 - 1
plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/Mscript.xtext

@@ -285,7 +285,7 @@ OperationArgumentList :
 	{OperationArgumentList} '(' (arguments+=Expression (',' arguments+=Expression)*)? ')';
 
 IterationCall :
-	'.' name=ID '(' variables+=IterationVariable (',' variables+=IterationVariable)* (';' accumulator=IterationAccumulator)? '|' expression=Expression ')';
+	'.' name=ID '(' variables+=IterationVariable (',' variables+=IterationVariable)* (';' accumulator=IterationAccumulator)? (';' breakCondition=Expression)? '|' expression=Expression ')';
 
 IterationVariable :
 	name=ID;

+ 16 - 18
plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/il/util/BuiltinFunctionDescriptor.java

@@ -11,11 +11,9 @@
 
 package org.eclipselabs.mscript.language.il.util;
 
-import java.util.Collections;
 import java.util.List;
 
 import org.eclipselabs.mscript.typesystem.DataType;
-import org.eclipselabs.mscript.typesystem.TensorType;
 import org.eclipselabs.mscript.typesystem.TypeSystemFactory;
 
 /**
@@ -29,23 +27,23 @@ public enum BuiltinFunctionDescriptor {
 			new Signature(
 					TypeSystemFactory.eINSTANCE.createRealType(),
 					null,
-					TypeSystemFactory.eINSTANCE.createUnitType())),
+					TypeSystemFactory.eINSTANCE.createUnitType()));
 	
-	SUM(
-			"sum",
-			new ISignature() {
-				
-				public List<DataType> evaluateOutputParameterDataTypes(DataType targetDataType, List<DataType> inputDataTypes) {
-					if (targetDataType instanceof TensorType && inputDataTypes.isEmpty()) {
-						TensorType tensorType = (TensorType) targetDataType;
-						if (tensorType.getDimensionality() == 1) {
-							return Collections.<DataType>singletonList(tensorType.getElementType());
-						}
-					}
-					return null;
-				}
-				
-			});
+//	SUM(
+//			"sum",
+//			new ISignature() {
+//				
+//				public List<DataType> evaluateOutputParameterDataTypes(DataType targetDataType, List<DataType> inputDataTypes) {
+//					if (targetDataType instanceof TensorType && inputDataTypes.isEmpty()) {
+//						TensorType tensorType = (TensorType) targetDataType;
+//						if (tensorType.getDimensionality() == 1) {
+//							return Collections.<DataType>singletonList(tensorType.getElementType());
+//						}
+//					}
+//					return null;
+//				}
+//				
+//			});
 
 	private String name;
 	private ISignature signature;

+ 1 - 1
plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/interpreter/BuiltinFunctionLookupTable.java

@@ -26,7 +26,7 @@ public class BuiltinFunctionLookupTable {
 	
 	{
 		functions.put(BuiltinFunctionDescriptor.UNIT.getName(), new UnitFunction());
-		functions.put(BuiltinFunctionDescriptor.SUM.getName(), new SumFunction());
+//		functions.put(BuiltinFunctionDescriptor.SUM.getName(), new SumFunction());
 	}
 	
 	public IFunction getFunction(String name) {