Commit e1ad9545 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

Merge branch 'dev' into 'master'

+ updates for v4.10.1 (#28)

See merge request swe/tools/t3tools/t3q!6
parents de1ec60a 68a190f1
Loading
Loading
Loading
Loading
+105 −62
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ ConstDef:

Type:
	//TODO: any is not part of the grammar directly so far, needs to be restricted to ExtFunctionDef only
	any=ANYKEYWORD | pre=PredefinedType | ref=TypeReference extensions+=ExtendedFieldReference*;
	any=ANYKEYWORD | pre=PredefinedType | ref=TypeReference extensions+=ExtendedTypeFieldReference*;

TypeReferenceTailType:
	ReferencedType | FieldReference;
@@ -84,9 +84,15 @@ NamedObject:
    name=IDENTIFIER;

ImportDef:
	IMPORTKEYWORD FROMKEYWORD name=IDENTIFIER spec=LanguageSpec? RECURSIVEKEYWORD? (all=AllWithExcepts | LBRACKET
	//TODO: add support to aliases in qualified name resolution
	IMPORTKEYWORD FROMKEYWORD name=IDENTIFIER spec=LanguageSpec? RECURSIVEKEYWORD? alias=ImportAlias?  (all=AllWithExcepts | LBRACKET
	importSpec=ImportSpec RBRACKET);

ImportAlias:
	//Added interpolation to make alias referenceable
	PORTREDIRECTSYMBOL name=IDENTIFIER
;

AllWithExcepts:
	{AllWithExcepts} ALLKEYWORD def=ExceptsDef?;

@@ -253,7 +259,7 @@ ActivateOp:
	ACTIVATEKEYWORD LPAREN altstep=AltstepInstance RPAREN;

DeactivateStatement:
	{DeactivateStatement} DEACTIVATEKEYWORD (LPAREN component=ComponentOrDefaultReference RPAREN)?;
	{DeactivateStatement} DEACTIVATEKEYWORD (LPAREN component=ObjectReference RPAREN)?;

LabelStatement:
	LABELKEYWORD name=IDENTIFIER;
@@ -297,15 +303,15 @@ DoneStatement:
	component=ComponentOrAny DOT DONEKEYWORD (PORTREDIRECTSYMBOL  value=ValueStoreSpec? index=IndexSpec? )?;

ValueStoreSpec:
	VALUEKEYWORD ref=VariableRef
	VALUEKEYWORD ref=ValueRef
;

KilledStatement:
	component=ComponentOrAny DOT KILLEDKEYWORD (PORTREDIRECTSYMBOL  value=ValueStoreSpec? index=IndexSpec? )?;

ComponentOrAny:
	compOrDefault=ComponentOrDefaultReference | {ComponentOrAny} (any=ANYKEYWORD (COMPONENTKEYWORD | FROMKEYWORD
	ref=VariableRef)) | {ComponentOrAny} (all=ALLKEYWORD COMPONENTKEYWORD);
	compOrDefault=ObjectReference | {ComponentOrAny} (any=ANYKEYWORD (COMPONENTKEYWORD | FROMKEYWORD
	ref=ValueRef)) | {ComponentOrAny} (all=ALLKEYWORD COMPONENTKEYWORD);

IndexAssignment:
	PORTREDIRECTSYMBOL index=IndexSpec;
@@ -380,13 +386,13 @@ AssignmentList:

	// TODO: should id reference something?
VariableAssignment:
	ref=VariableRef ASSIGNMENTCHAR (decoded=DECODED_MODIFIER  ( LPAREN expr=Expression RPAREN )? )? name=IDENTIFIER;
	ref=ValueRef ASSIGNMENTCHAR (decoded=DECODED_MODIFIER  ( LPAREN expr=Expression RPAREN )? )? name=IDENTIFIER;

VariableList:
	entries+=VariableEntry (COMMA entries+=VariableEntry)*;

VariableEntry:
	VariableRef | {VariableEntry} MINUS;
	ValueRef | {VariableEntry} MINUS;

TriggerStatement:
	PortOrAny DOT trigger=PortTriggerOp;
@@ -399,8 +405,8 @@ ReceiveStatement:

	// TODO: extend with other possible references
PortOrAny:
	ref=[FormalPortAndValuePar|IDENTIFIER] array=ArrayOrBitRef? | {PortOrAny} (ANYKEYWORD (PORTKEYWORD | FROMKEYWORD
	variable=VariableRef));
	ref=ObjectReference array=ArrayOrBitRef? | {PortOrAny} (ANYKEYWORD (PORTKEYWORD | FROMKEYWORD
	variable=ValueRef));

PortReceiveOp:
	{PortReceiveOp} RECEIVEOPKEYWORD (LPAREN template=TemplateInstance RPAREN)? from=FromClause? redirect=PortRedirect?;
@@ -416,13 +422,13 @@ PortRedirect:
	index=IndexSpec);

SenderSpec:
	SENDERKEYWORD variable=VariableRef;
	SENDERKEYWORD variable=ValueRef;

ValueSpec:
	VALUEKEYWORD (variable=VariableRef | (LPAREN specs+=SingleValueSpec (COMMA specs+=SingleValueSpec)* RPAREN));
	VALUEKEYWORD (variable=ValueRef | (LPAREN specs+=SingleValueSpec (COMMA specs+=SingleValueSpec)* RPAREN));

SingleValueSpec:
	variable=VariableRef (ASSIGNMENTCHAR (decoded=DECODED_MODIFIER  ( LPAREN expr=Expression RPAREN )? )? fieldRef=[FieldReference|IDENTIFIER] ext+=ExtendedFieldReference*)?;
	variable=ValueRef (ASSIGNMENTCHAR (decoded=DECODED_MODIFIER  ( LPAREN expr=Expression RPAREN )? )? fieldRef=[FieldReference|IDENTIFIER] ext+=ExtendedFieldReference*)?;

AltGuardChar:
	{AltGuardChar} SQUAREOPEN expr=BooleanExpression? SQUARECLOSE;
@@ -464,27 +470,27 @@ TemplateRef:
	// hack to deal with ambiguity between FormalValuePar and FormalPortPar
// TODO; find better solution for this
FormalPortAndValuePar:
	FormalPortPar | FormalValuePar | PortElement;
	FormalValuePar | PortElement;

FormalPar:
	FormalPortAndValuePar | FormalTemplatePar | FormalTimerPar	
	FormalPortAndValuePar | FormalTemplatePar	
;

PortRefAssignment:
	port=[FormalPortAndValuePar|IDENTIFIER] ASSIGNMENTCHAR value=PortRef;
//PortRefAssignment:
//	port=[FormalPortAndValuePar|IDENTIFIER] ASSIGNMENTCHAR value=PortRef;

TimerRefAssignment:
	timer=[FormalTimerPar|IDENTIFIER] ASSIGNMENTCHAR value=[TimerVarInstance|IDENTIFIER];
//TimerRefAssignment:
//	timer=[FormalTimerPar|IDENTIFIER] ASSIGNMENTCHAR value=[TimerVarInstance|IDENTIFIER];

//FunctionActualPar:
//	template=TemplateInstance | component=ComponentRef | timer=[TimerVarInstance|IDENTIFIER] | port=PortRef |
//	{FunctionActualPar} MINUS;

ComponentRef:
	ref=ComponentOrDefaultReference | system=SYSTEMKEYWORD | self=SELFOP | mtc=MTCKEYWORD;
	ref=ObjectReference | system=SYSTEMKEYWORD | self=SELFOP | mtc=MTCKEYWORD;

ComponentOrDefaultReference:
	variable=VariableRef /*| function=FunctionInstance /*| preFunction=PreDefFunction*/;
ObjectReference:
	variable=ValueRef /*| function=FunctionInstance /*| preFunction=PreDefFunction*/;

TestcaseInstance:
	EXECUTEKEYWORD LPAREN ref=[TestcaseDef|QualifiedIdentifier] LPAREN tcParams=ActualParList? RPAREN (COMMA
@@ -501,28 +507,34 @@ TimeoutStatement:
	ref=TimerRefOrAny DOT TIMEOUTKEYWORD index=IndexAssignment?;

StartTimerStatement:
	ref=[TimerVarInstance|IDENTIFIER] arryRefs+=ArrayOrBitRef* DOT STARTKEYWORD (LPAREN expr=Expression RPAREN)?;
	ref=ObjectReference arryRefs+=ArrayOrBitRef* DOT STARTKEYWORD (LPAREN expr=Expression RPAREN)?;

StopTimerStatement:
	ref=TimerRefOrAll DOT STOPKEYWORD;

	//TODO: find the correct cross reference: from type?
TimerRefOrAny:
	ref=[TimerVarInstance|IDENTIFIER] | {TimerRefOrAny} ANYKEYWORD timer=TIMERKEYWORD | ANYKEYWORD FROMKEYWORD
	ref=ObjectReference | {TimerRefOrAny} ANYKEYWORD timer=TIMERKEYWORD | ANYKEYWORD FROMKEYWORD
	from=IDENTIFIER;

TimerRefOrAll:
	ref=[TimerVarInstance|IDENTIFIER] | {TimerRefOrAll} ALLKEYWORD timer=TIMERKEYWORD;
	ref=ObjectReference | {TimerRefOrAll} ALLKEYWORD timer=TIMERKEYWORD;

BasicStatements:
	log=LogStatement | block=StatementBlock | loop=LoopConstruct | conditional=ConditionalConstruct |
	select=SelectCaseConstruct | assign=Assignment;

StatementBlock:
	{StatementBlock} LBRACKET (def+=FunctionDefList | stat+=FunctionStatementList)* RBRACKET;
	{StatementBlock} LBRACKET (defOrStatementList=FunctionDefOrStatementList)? RBRACKET;

FunctionStatementList:
	(statements+=FunctionStatement sc+=SEMICOLON?)+;
FunctionDefOrStatementList:
	//NOTE: interpolation to maintain order
	(defOrStatement+=FunctionDefOrStatement)+;

FunctionDefOrStatement:
	//TODO: need assignments?	
	(FunctionBodyDef | FunctionStatement) sc=SEMICOLON?
;

FunctionStatement:
	timer=TimerStatements | basic=BasicStatements | behavior=BehaviourStatements | verdict=SetLocalVerdict |
@@ -539,21 +551,29 @@ SetLocalVerdict:
ConfigurationStatements:
	connect=ConnectStatement | map=MapStatement | disconnect=DisconnectStatement | unmap=UnmapStatement |
	done=DoneStatement | killed=KilledStatement | startTc=StartTCStatement | stopTc=StopTCStatement |
	killTc=KillTCStatement;
	killTc=KillTCStatement | setEncode=SetEncodeStatement;

KillTCStatement:
	{KillTCStatement} KILLKEYWORD | ((ComponentReferenceOrLiteral | {KillTCStatement} ALLKEYWORD COMPONENTKEYWORD) DOT
	KILLKEYWORD);

SetEncodeStatement:
	{SetEncodeStatement}
	( expr=SingleExpression | ( ALLKEYWORD PORTKEYWORD ) | SELFOP ) 
	| 
	DOT SETENCODEKEYWORD LPAREN type=Type COMMA expr=SingleExpression RPAREN 
;

StopTCStatement:
	{StopTCStatement} STOPKEYWORD | (ref=ComponentReferenceOrLiteral | {StopTCStatement} all=ALLKEYWORD COMPONENTKEYWORD) DOT
	STOPKEYWORD;
	

ComponentReferenceOrLiteral:
	ref=ComponentOrDefaultReference | {ComponentReferenceOrLiteral} MTCKEYWORD | {ComponentReferenceOrLiteral} SELFOP;
	ref=ObjectReference | {ComponentReferenceOrLiteral} MTCKEYWORD | {ComponentReferenceOrLiteral} SELFOP;

StartTCStatement:
	ref=ComponentOrDefaultReference DOT STARTKEYWORD LPAREN (function=FunctionInstance | altstep=AltstepInstance) RPAREN;
	ref=ObjectReference DOT STARTKEYWORD LPAREN (function=FunctionInstance | altstep=AltstepInstance) RPAREN;

UnmapStatement:
	{UnmapStatement} UNMAPKEYWORD (spec=SingleConnectionSpec clause=ParamClause? | spec=AllConnectionsSpec
@@ -612,16 +632,16 @@ ClearStatement:
	port=PortOrAll DOT CLEAROPKEYWORD;

PortOrAll:
	port=[FormalPortAndValuePar|IDENTIFIER] arrayRefs+=ArrayOrBitRef* | {PortOrAll} ALLKEYWORD PORTKEYWORD;
	port=ObjectReference arrayRefs+=ArrayOrBitRef* | {PortOrAll} ALLKEYWORD PORTKEYWORD;

RaiseStatement:
	port=[FormalPortAndValuePar|IDENTIFIER] arrayRefs+=ArrayOrBitRef* DOT op=PortRaiseOp;
	port=ObjectReference arrayRefs+=ArrayOrBitRef* DOT op=PortRaiseOp;

PortRaiseOp:
	RAISEKEYWORD LPAREN signature=[SignatureDef|QualifiedIdentifier] COMMA template=TemplateInstance RPAREN to=ToClause?;

ReplyStatement:
	port=[FormalPortAndValuePar|IDENTIFIER] arrayRefs+=ArrayOrBitRef* DOT op=PortReplyOp;
	port=ObjectReference arrayRefs+=ArrayOrBitRef* DOT op=PortReplyOp;

PortReplyOp:
	REPLYKEYWORD LPAREN template=TemplateInstance value=ReplyValue? RPAREN to=ToClause?;
@@ -630,7 +650,7 @@ ReplyValue:
	VALUEKEYWORD body=TemplateBody;

CallStatement:
	port=[FormalPortAndValuePar|IDENTIFIER] arrayRefs+=ArrayOrBitRef* DOT op=PortCallOp body=PortCallBody?;
	port=ObjectReference arrayRefs+=ArrayOrBitRef* DOT op=PortCallOp body=PortCallBody?;

PortCallOp:
	CALLOPKEYWORD LPAREN params=CallParameters RPAREN to=ToClause?;
@@ -658,7 +678,7 @@ CallBodyOps:

	// changed port=ArrayIdentifierRef -> port=[PortElement|IDENTIFIER] arryRefs+=ArrayOrBitRef*
SendStatement:
	port=[FormalPortAndValuePar|IDENTIFIER] arryRefs+=ArrayOrBitRef* DOT send=PortSendOp;
	port=ObjectReference arryRefs+=ArrayOrBitRef* DOT send=PortSendOp;

PortSendOp:
	SENDOPKEYWORD LPAREN template=TemplateInstance RPAREN to=ToClause?;
@@ -666,8 +686,8 @@ PortSendOp:
ToClause:
	{ToClause} TOKEYWORD (template=TemplateInstance | ref=AddressRefList | ALLKEYWORD COMPONENTKEYWORD);

FunctionDefList:
	(locDef=FunctionLocalDef | locInst=FunctionLocalInst) ws=WithStatement? sc=SEMICOLON?;
FunctionBodyDef:
	(locDef=FunctionLocalDef | locInst=FunctionLocalInst) ws=WithStatement?;

FunctionLocalDef:
	constDef=ConstDef | templateDef=TemplateDef;
@@ -691,7 +711,7 @@ ModuleOrGroup:

ReferencedType:
	SubTypeDefNamed | RecordDefNamed | SetDefNamed | PortDef | ComponentDef | UnionDefNamed | EnumDefNamed |
	RecordOfDefNamed | SetOfDefNamed | SignatureDef | ModuleOrGroup;
	RecordOfDefNamed | SetOfDefNamed | SignatureDef | ModuleOrGroup | ImportAlias;

TypeDef:
	TYPEDEFKEYWORD body=TypeDefBody;
@@ -916,7 +936,7 @@ TempVarList:
	variables+=SingleTempVarInstance (COMMA variables+=SingleTempVarInstance)*;

TimerVarInstance:
	SingleVarInstance | FormalTimerPar | ComponentDef;
	SingleVarInstance | ComponentDef;

SingleVarInstance:
	name=IDENTIFIER array=ArrayDef? (ac=ASSIGNMENTCHAR expr=Expression)?;
@@ -973,7 +993,7 @@ SingleTemplateExpression:

EnumTemplateExtension:
	{EnumTemplateExtension}
	LPAREN template+=TemplateBody (COMMA template+=TemplateBody)* RPAREN
	LPAREN (template+=TemplateBody | range+=Range) (COMMA (template+=TemplateBody | range+=Range))* RPAREN
;

	// TODO: test this!
@@ -1155,10 +1175,10 @@ SingleConstDef:
	name=IDENTIFIER array=ArrayDef? assign=ASSIGNMENTCHAR expr=ConstantExpression;

CompoundExpression:
	FieldExpressionList | ArrayExpression;
	FieldExpressionList | ArrayOrMixedExpression;

ArrayExpression:
	{ArrayExpression} LBRACKET list=ArrayElementExpressionList? RBRACKET;
ArrayOrMixedExpression:
	{ArrayOrMixedExpression} LBRACKET (list=ArrayElementExpressionList (COMMA specs+=FieldExpressionSpec)*)? RBRACKET;

FieldExpressionList:
	LBRACKET specs+=FieldExpressionSpec (COMMA specs+=FieldExpressionSpec)* RBRACKET;
@@ -1206,7 +1226,7 @@ ExtendedEnumReference:
;

RefValueHead:
	RefValue | ModuleOrGroup;
	RefValue | ModuleOrGroup | ImportAlias;

RefValueElement:
	RefValue | GroupDef | FieldReference;
@@ -1220,9 +1240,27 @@ RefValueTail:
SpecElement:
	Head | RefValueTail;

//ExtendedFieldReference ::= 		{ ( Dot ( Identifier | PredefinedType ) ) | ArrayOrBitRef | DecodedFieldReference }+ 
//ExtendedTypeFieldReference ::= 	{ ( Dot ( Identifier | PredefinedType ) ) | ( "[" Minus "]" ) }+ 
//ExtendedFieldOrTypeReference ::= 	{ ( Dot ( Identifier | PredefinedType ) ) | ArrayOrBitRef | ( "[" Minus "]" ) }+ 

ExtendedFieldReference:
	(DOT (field=[FieldReference|IDENTIFIER] | type=PredefinedType)) | array=ArrayOrBitRef | decoded=DecodedFieldReference | {ExtendedFieldReference}
	SQUAREOPEN MINUS SQUARECLOSE;
	(DOT (field=[FieldReference|IDENTIFIER] | type=PredefinedType)) | array=ArrayOrBitRef | decoded=DecodedFieldReference
	;

ExtendedTypeFieldReference:
	(DOT (field=[FieldReference|IDENTIFIER] | type=PredefinedType)) | array=ArrayOrBitRef | {ExtendedTypeFieldReference}
	SQUAREOPEN MINUS SQUARECLOSE
	;

ExtendedFieldOrTypeReference:
	(DOT (field=[FieldOrTypeReference|IDENTIFIER] | type=PredefinedType)) | array=ArrayOrBitRef | {ExtendedFieldOrTypeReference}
	SQUAREOPEN MINUS SQUARECLOSE
	;

FieldOrTypeReference:
	FieldReference | ReferencedType
;

DecodedFieldReference:
	DECODEDFIELDCHAR DecodedFieldType
@@ -1236,7 +1274,8 @@ DecodedFieldType:
// SingleVarInstance contained in TimerVarInstance (according to EBNF rules)
RefValue:
	ModuleParameter | FieldReference | FormalTemplatePar | SingleTempVarInstance |
	FunctionRef | TimerVarInstance | FormalPortPar | PortElement | NamedObject
	FunctionRef | TimerVarInstance | PortElement | NamedObject
	| FormalValuePar
//	| Enumeration //TODO: needed?	
;

@@ -1301,7 +1340,7 @@ DefOrFieldRefList:
// TODO: check this rule
DefOrFieldRef:
	id=[TTCN3Reference|QualifiedIdentifier] | (field=FieldReference | {DefOrFieldRef} SQUAREOPEN MINUS SQUARECLOSE)
	extended=ExtendedFieldReference? | all=AllRef;
	extended=ExtendedFieldOrTypeReference? | all=AllRef;

AllRef:
	{AllRef} GROUPKEYWORD ALLKEYWORD (EXCEPTKEYWORD LBRACKET groupList=GroupRefList RBRACKET)? | {AllRef} (TYPEDEFKEYWORD
@@ -1346,7 +1385,7 @@ RunningTimerOp:
	timerRef=TimerRefOrAny DOT RUNNINGKEYWORD index=IndexAssignment?;

ReadTimerOp:
	timer=[TimerVarInstance|IDENTIFIER] DOT READKEYWORD;
	timer=ObjectReference DOT READKEYWORD;

PermutationMatch:
	PERMUTATIONKEYWORD list=ListOfTemplates;
@@ -1404,36 +1443,37 @@ FunctionFormalParList:
	params+=FunctionFormalPar (COMMA params+=FunctionFormalPar)*;

FunctionFormalPar:
	value=FormalValuePar | timer=FormalTimerPar | template=FormalTemplatePar | port=FormalPortPar;
//	value=FormalValuePar | timer=FormalTimerPar | template=FormalTemplatePar | port=FormalPortPar;
	value=FormalValuePar | template=FormalTemplatePar;

FormalValuePar:
	(inOut=(INPARKEYWORD | INOUTPARKEYWORD | OUTPARKEYWORD))? (mod=LAZY_MODIFIER | mod=FUZZY_MODIFIER)? type=Type
	name=IDENTIFIER (ASSIGNMENTCHAR (expression=Expression | MINUS))?;
	name=IDENTIFIER array=ArrayDef? (ASSIGNMENTCHAR (expression=Expression | MINUS))?;

FormalTimerPar:
	INOUTPARKEYWORD? TIMERKEYWORD name=IDENTIFIER;

FormalPortPar:
	INOUTPARKEYWORD? port=[PortDef|QualifiedIdentifier] name=IDENTIFIER;
//FormalTimerPar:
//	INOUTPARKEYWORD? TIMERKEYWORD name=IDENTIFIER;
//
//FormalPortPar:
//	INOUTPARKEYWORD? port=[PortDef|QualifiedIdentifier] name=IDENTIFIER;

FormalTemplatePar:
	(inOut=(INPARKEYWORD | OUTPARKEYWORD | INOUTPARKEYWORD))? (TEMPLATEKEYWORD | restriction=RestrictedTemplate)
	(mod=LAZY_MODIFIER | mod=FUZZY_MODIFIER)? type=Type name=IDENTIFIER (ASSIGNMENTCHAR (templ=TemplateInstance | MINUS))?;
	(mod=LAZY_MODIFIER | mod=FUZZY_MODIFIER)? type=Type name=IDENTIFIER array=ArrayDef? (ASSIGNMENTCHAR (templ=TemplateInstance | MINUS))?;

RunsOnSpec:
	RUNSKEYWORD ONKEYWORD component=[ComponentDef|QualifiedIdentifier];

ReturnType:
	RETURNKEYWORD (template=TEMPLATEKEYWORD | restricted=RestrictedTemplate)? type=Type;
	RETURNKEYWORD (template=TEMPLATEKEYWORD | restricted=RestrictedTemplate)? type=Type array=ArrayDef?;

	//TODO: try to remove extra=ExtraMatchingAttributes? from this rule -> removed?
	//		where does it come from? it is already in TemplateBody, perhaps it was parsed as expression by default?	 
Assignment:
	ref=VariableRef ASSIGNMENTCHAR (body=TemplateBody) 
	ref=ValueRef ASSIGNMENTCHAR (body=TemplateBody) 
//	extra=ExtraMatchingAttributes?
	;

VariableRef:
ValueRef:
	ref=ReferencedValue /*ext+=ExtendedFieldReference*/;

	// Operators and special chars
@@ -1457,7 +1497,7 @@ ShiftOp returns ecore::EString:

PredefinedType returns ecore::EString:
	BITSTRINGKEYWORD | BOOLEANKEYWORD | CHARSTRINGKEYWORD | UniversalCharString | INTEGERKEYWORD | OCTETSTRINGKEYWORD |
	HEXSTRINGKEYWORD | VERDICTTYPEKEYWORD | FLOATKEYWORD | ADDRESSKEYWORD | DEFAULTKEYWORD | ANYTYPEKEYWORD;
	HEXSTRINGKEYWORD | VERDICTTYPEKEYWORD | FLOATKEYWORD | ADDRESSKEYWORD | DEFAULTKEYWORD | ANYTYPEKEYWORD | TIMERKEYWORD;

UniversalCharString returns ecore::EString:
	UNIVERSALKEYWORD CHARSTRINGKEYWORD;
@@ -1921,6 +1961,9 @@ terminal STARTKEYWORD returns ecore::EString:
terminal KILLKEYWORD returns ecore::EString:
	'kill';

terminal SETENCODEKEYWORD returns ecore::EString:
	'setencode';

terminal SENDOPKEYWORD returns ecore::EString:
	'send';

+58 −62
Original line number Diff line number Diff line
@@ -14,7 +14,6 @@ import de.ugoe.cs.swe.tTCN3.EnumerationList
import de.ugoe.cs.swe.tTCN3.FormalTemplatePar
import de.ugoe.cs.swe.tTCN3.FormalValuePar
import de.ugoe.cs.swe.tTCN3.FunctionDef
import de.ugoe.cs.swe.tTCN3.FunctionDefList
import de.ugoe.cs.swe.tTCN3.FunctionFormalPar
import de.ugoe.cs.swe.tTCN3.FunctionFormalParList
import de.ugoe.cs.swe.tTCN3.GroupDef
@@ -66,6 +65,8 @@ import static org.eclipse.xtext.scoping.Scopes.*
import de.ugoe.cs.swe.tTCN3.ExtConstDef
import de.ugoe.cs.swe.tTCN3.IdentifierObjectList
import de.ugoe.cs.swe.tTCN3.BaseTemplate
import de.ugoe.cs.swe.tTCN3.FunctionDefOrStatement
import de.ugoe.cs.swe.tTCN3.FunctionBodyDef

class TTCN3ScopeHelper {

@@ -202,32 +203,37 @@ class TTCN3ScopeHelper {
	}

	def static void scopeStatementBlock(StatementBlock block, ArrayList<EObject> list) {
		for (FunctionDefList l : block.def.filter[it != null]) {
			if (l.locDef != null && l.locDef.constDef != null) {
		if (block.defOrStatementList === null) {
			return
		}
		for (FunctionDefOrStatement l : block.defOrStatementList.defOrStatement.filter[it instanceof FunctionBodyDef]) {
			if (l instanceof FunctionBodyDef) {
				if (l.locDef !== null && l.locDef.constDef !== null) {
					val constDefList = l.locDef.constDef.defs as ConstList
					for (SingleConstDef d : constDefList.list) {
						list.add(d);
					}
			} else if (l.locDef != null && l.locDef.templateDef != null) {
				} else if (l.locDef !== null && l.locDef.templateDef !== null) {
					list.add(l.locDef.templateDef.base)
				}
			if (l.locInst != null && l.locInst.variable != null) {
				if (l.locInst !== null && l.locInst.variable !== null) {
					val varList = l.locInst.variable.list
					val tempList = l.locInst.variable.tempList
				if (varList != null) {
					if (varList !== null) {
						list.addAll(varList.variables);
					}
				if (tempList != null) {
					if (tempList !== null) {
						list.addAll(tempList.variables);
					}
			} else if (l.locInst != null && l.locInst.timer != null) {
				} else if (l.locInst !== null && l.locInst.timer !== null) {
					val varList = l.locInst.timer.list
				if (varList != null) {
					if (varList !== null) {
						list.addAll(varList.variables);
					}
				}
			}
		}
	}

	def static void scopeInitial(Initial init, ArrayList<EObject> list) {
		if (init.variable != null) {
@@ -238,17 +244,25 @@ class TTCN3ScopeHelper {
		}
	}

	def static void scopeFunctionParameterValue(FunctionFormalParList parList, ArrayList<EObject> list) {
		for (FunctionFormalPar p : parList.params) {
			if (p.template != null) {
	def static ArrayList<RefValueElement> getFormalParameters(List<FunctionFormalPar> parameters) {
		var list = new ArrayList<RefValueElement>()
		for (FunctionFormalPar p : parameters) {
			if (p.template !== null) {
				list.add(p.template)
			} else if (p.value != null) {
			} else if (p.value !== null) {
				list.add(p.value)
			} else if (p.port != null) {
				list.add(p.port)
			} else if (p.timer != null) {
				list.add(p.timer)
//			} else if (p.port !== null) {
//				list.add(p.port)
//			} else if (p.timer !== null) {
//				list.add(p.timer)
			}
		}
		return list
	}

	def static void scopeFunctionParameterValue(FunctionFormalParList parList, ArrayList<EObject> list) {
		if (parList !== null) {
			list.addAll(getFormalParameters(parList.params))
		}
	}

@@ -305,19 +319,22 @@ class TTCN3ScopeHelper {

	def static void scopeAltstepLocalDefList(AltstepLocalDefList localList, ArrayList<EObject> list) {
		for (AltstepLocalDef a : localList.defs) {
			if (a.const != null) {
			if (a.const !== null) {
				val constDefList = a.const.defs as ConstList
				for (SingleConstDef d : constDefList.list) {
					list.add(d);
				}
			}
			if (a.variable != null) {
			if (a.timer !== null) {
				list.addAll(a.timer.list.variables) 
			}
			if (a.variable !== null) {
				val varList = a.variable.list
				val tempList = a.variable.tempList
				if (varList != null) {
				if (varList !== null) {
					list.addAll(varList.variables);
				}
				if (tempList != null) {
				if (tempList !== null) {
					list.addAll(tempList.variables);
				}		
			}
@@ -363,21 +380,10 @@ class TTCN3ScopeHelper {

	def static Iterable<RefValueElement> functionLocalParameter(FunctionDef function) {
		val list = newArrayList
		if (function.parameterList == null)
		if (function.parameterList === null)
			return list;

		for (p : function.parameterList.params) {
			if (p.timer != null) {
				list.add(p.timer)
			} else if (p.value != null) {
				list.add(p.value)
			} else if (p.template != null) {
				list.add(p.template)
			} else if (p.port != null) {
				list.add(p.port)
			}
		}
		list
		list.addAll(getFormalParameters(function.parameterList.params))
		return list
	}

    def static Iterable<RefValueElement> testcaseLocalParameter(TestcaseDef testcase) {
@@ -399,20 +405,10 @@ class TTCN3ScopeHelper {
	def static Iterable<RefValueElement> altstepLocalParameter(AltstepDef altstep) {
		val list = newArrayList
		if (altstep.params == null)
			return list;

		for (p : altstep.params.params) {
			if (p.timer != null) {
				list.add(p.timer)
			} else if (p.value != null) {
				list.add(p.value)
			} else if (p.template != null) {
				list.add(p.template)
			} else if (p.port != null) {
				list.add(p.port)
			}
		}
		list
			return list
		//DONE: extract and reuse
		list.addAll(getFormalParameters(altstep.params.params))
		return list
	}


+55 −13

File changed.

Preview size limit exceeded, changes collapsed.

+46 −34

File changed.

Preview size limit exceeded, changes collapsed.

+16 −16

File changed.

Preview size limit exceeded, changes collapsed.

Loading