Commit 3b520ffc authored by Daniel Honsel's avatar Daniel Honsel
Browse files

+ improved timer

+ added some missing altstep references
parent 0f9fa113
Loading
Loading
Loading
Loading
+20 −21
Original line number Diff line number Diff line
@@ -190,8 +190,8 @@ SystemSpec:
	SYSTEMKEYWORD component=[ComponentDef|IDENTIFIER];

SignatureDef:
	SIGNATUREKEYWORD name=IDENTIFIER LPAREN paramList=SignatureFormalParList? RPAREN (return=ReturnType | NOBLOCKKEYWORD)?
	sprec=ExceptionSpec?;
	SIGNATUREKEYWORD name=IDENTIFIER LPAREN paramList=SignatureFormalParList? RPAREN (return=ReturnType |
	NOBLOCKKEYWORD)? sprec=ExceptionSpec?;

ExceptionSpec:
	EXCEPTIONKEYWORD LPAREN TypeList RPAREN;
@@ -422,7 +422,7 @@ ArrayIdentifierRefAssignment:
	name=IDENTIFIER ASSIGNMENTCHAR value=ArrayIdentifierRef;

FunctionActualPar:
	ArrayIdentifierRef | InLineTemplate | ComponentRef | {FunctionActualPar} MINUS;
	idRef=ArrayIdentifierRef | template=InLineTemplate | component=ComponentRef | {FunctionActualPar} MINUS;

ComponentRef:
	{ComponentRef} (ref=ComponentOrDefaultReference | SYSTEMKEYWORD | SELFOP | MTCKEYWORD);
@@ -439,29 +439,26 @@ TestcaseActualParList:
	(templAssign+=TemplateInstanceAssignment (COMMA templAssign+=TemplateInstanceAssignment)*);

TimerStatements:
	StartTimerStatement;
	start=StartTimerStatement | stop=StopTimerStatement | timeout=TimeoutStatement;

// TODO: references
TimeoutStatement:
	=> (TimerRefOrAny DOT TIMEOUTKEYWORD);
	ref=TimerRefOrAny DOT TIMEOUTKEYWORD;

	//TODO: references
StartTimerStatement:
	=> (ArrayIdentifierRef DOT STARTKEYWORD) (LPAREN expr=Expression RPAREN)? | StopTimerStatement;
	ref=[SingleVarInstance|IDENTIFIER] arryRefs+=ArrayOrBitRef* DOT STARTKEYWORD (LPAREN expr=Expression RPAREN)?;

StopTimerStatement:
	=> (TimerRefOrAll DOT STOPKEYWORD) | TimeoutStatement;
	ref=TimerRefOrAll DOT STOPKEYWORD;

TimerRefOrAny:
	name=ArrayIdentifierRef | {TimerRefOrAny} ANYKEYWORD timer=TIMERKEYWORD;
	ref=[SingleVarInstance|IDENTIFIER] | {TimerRefOrAny} ANYKEYWORD timer=TIMERKEYWORD;

//TODO: references
TimerRefOrAll:
	name=ArrayIdentifierRef | {TimerRefOrAll} ALLKEYWORD timer=TIMERKEYWORD;
	ref=[SingleVarInstance|IDENTIFIER] | {TimerRefOrAll} ALLKEYWORD timer=TIMERKEYWORD;

//TODO: references
 ArrayIdentifierRef:
	name=IDENTIFIER refs+=ArrayOrBitRef*;
	name=IDENTIFIER arryRefs+=ArrayOrBitRef*;

BasicStatements:
	LogStatement | StatementBlock | LoopConstruct | ConditionalConstruct | SelectCaseConstruct | Assignment;
@@ -620,7 +617,7 @@ FunctionLocalInst:
	variable=VarInstance | timer=TimerInstance;

TimerInstance:
	TIMERKEYWORD VarList;
	TIMERKEYWORD list=VarList;

VarInstance:
	VARKEYWORD ((listType=Type list=VarList) | ((TEMPLATEKEYWORD | resTemplate=RestrictedTemplate) type=Type
@@ -1014,7 +1011,8 @@ ArrayElementExpressionList:
	expr+=NotUsedOrExpression (COMMA expr+=NotUsedOrExpression)*;

FieldExpressionSpec:
	(fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR expr=NotUsedOrExpression;
	(fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR
	expr=NotUsedOrExpression;

NotUsedOrExpression:
	Expression | {NotUsedOrExpression} MINUS;
@@ -1029,7 +1027,8 @@ FieldConstExpressionList:
	LBRACKET specs+=FieldConstExpressionSpec (COMMA specs+=FieldConstExpressionSpec)* RBRACKET;

FieldConstExpressionSpec:
	(fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR constExpr=ConstantExpression;
	(fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR
	constExpr=ConstantExpression;

ArrayConstExpression:
	{ArrayConstExpression} LBRACKET list=ArrayElementConstExpressionList? RBRACKET;
+32 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import de.ugoe.cs.swe.tTCN3.ModuleParameter
import de.ugoe.cs.swe.tTCN3.ModulePar
import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed
import de.ugoe.cs.swe.tTCN3.SetOfDefNamed
import de.ugoe.cs.swe.tTCN3.AltstepDef

class TTCN3ScopeHelper {

@@ -205,4 +206,35 @@ class TTCN3ScopeHelper {
			}
		}
	}

	def static void scopeAltstepExtendedDefList(RefValue variable, AltstepDef altstep, ArrayList<EObject> list) {
		if (altstep.spec != null) {
			componentScopeValueRefs(altstep.spec.component, list)
		}
	}

	def private static void componentScopeValueRefs(ComponentDef component, ArrayList<EObject> list) {

		// TODO: template parameters l.element.variable.tempList
		for (ComponentDefList l : component.defs.filter[it.element.variable != null]) {
			if (l.element.variable.list != null) {
				for (SingleVarInstance v : l.element.variable.list.variables) {
					list.add(v)
				}
			}
		}
		for (ComponentDefList l : component.defs.filter[it.element.timer != null]) {
			for (SingleVarInstance v : l.element.timer.list.variables) {
				list.add(v)
			}
		}
		for (ComponentDefList l : component.defs.filter[it.element.const != null]) {
			for (SingleConstDef v : l.element.const.defs.list) {
				list.add(v)
			}
		}
		for (ComponentDef e : component.extends) {
			componentScopeValueRefs(e, list)
		}
	}
}
+11 −12
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ import de.ugoe.cs.swe.tTCN3.AltstepDef
import de.ugoe.cs.swe.tTCN3.AltstepLocalDefList
import de.ugoe.cs.swe.tTCN3.ComponentDef
import de.ugoe.cs.swe.tTCN3.ComponentDefList
import de.ugoe.cs.swe.tTCN3.EnumDefNamed
import de.ugoe.cs.swe.tTCN3.FieldSpec
import de.ugoe.cs.swe.tTCN3.ForStatement
import de.ugoe.cs.swe.tTCN3.FunctionDef
@@ -15,12 +16,19 @@ import de.ugoe.cs.swe.tTCN3.ModuleDefinitionsList
import de.ugoe.cs.swe.tTCN3.PortElement
import de.ugoe.cs.swe.tTCN3.PortOrAny
import de.ugoe.cs.swe.tTCN3.RecordDefNamed
import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed
import de.ugoe.cs.swe.tTCN3.RefValue
import de.ugoe.cs.swe.tTCN3.ReferencedType
import de.ugoe.cs.swe.tTCN3.SetDefNamed
import de.ugoe.cs.swe.tTCN3.SetOfDefNamed
import de.ugoe.cs.swe.tTCN3.SignatureDef
import de.ugoe.cs.swe.tTCN3.StatementBlock
import de.ugoe.cs.swe.tTCN3.StructuredTypeDef
import de.ugoe.cs.swe.tTCN3.TTCN3Module
import de.ugoe.cs.swe.tTCN3.TemplateDef
import de.ugoe.cs.swe.tTCN3.TestcaseDef
import de.ugoe.cs.swe.tTCN3.TypeDef
import de.ugoe.cs.swe.tTCN3.UnionDefNamed
import java.util.ArrayList
import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.EReference
@@ -30,16 +38,6 @@ import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider
import static org.eclipse.xtext.scoping.Scopes.*

import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.*
import de.ugoe.cs.swe.tTCN3.ReferencedType
import de.ugoe.cs.swe.tTCN3.StructuredTypeDef
import de.ugoe.cs.swe.tTCN3.SubTypeDef
import de.ugoe.cs.swe.tTCN3.SetDefNamed
import de.ugoe.cs.swe.tTCN3.UnionDefNamed
import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed
import de.ugoe.cs.swe.tTCN3.SetOfDefNamed
import de.ugoe.cs.swe.tTCN3.EnumDefNamed
import de.ugoe.cs.swe.tTCN3.FormalValuePar
import de.ugoe.cs.swe.tTCN3.SignatureDef

class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {

@@ -66,6 +64,7 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {
				variable.scopeTemplateOrValueFormalParList(parent.parList, list)
			} else if (parent instanceof AltstepDef) {
				if(parent.params != null) variable.scopeFunctionParameterValue(parent.params, list)
				variable.scopeAltstepExtendedDefList(parent, list)
			} else if (parent instanceof AltstepLocalDefList) {
				variable.scopeAltstepLocalDefList(parent, list)
			} else if (parent instanceof GroupDef) {