/** * Copyright (c) 2016 ARM Ltd. and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * Contributors: * ARM Ltd and ARM Germany GmbH - Initial API and implementation */ package com.arm.cmsis.pack.debugseq.generator; import com.arm.cmsis.pack.debugseq.debugSeq.And; import com.arm.cmsis.pack.debugseq.debugSeq.Assignment; import com.arm.cmsis.pack.debugseq.debugSeq.BitAnd; import com.arm.cmsis.pack.debugseq.debugSeq.BitNot; import com.arm.cmsis.pack.debugseq.debugSeq.BitOr; import com.arm.cmsis.pack.debugseq.debugSeq.BitXor; import com.arm.cmsis.pack.debugseq.debugSeq.Block; import com.arm.cmsis.pack.debugseq.debugSeq.CodeBlock; import com.arm.cmsis.pack.debugseq.debugSeq.Comparison; import com.arm.cmsis.pack.debugseq.debugSeq.Control; import com.arm.cmsis.pack.debugseq.debugSeq.DapDelay; import com.arm.cmsis.pack.debugseq.debugSeq.DapJtagSequence; import com.arm.cmsis.pack.debugseq.debugSeq.DapSwjClock; import com.arm.cmsis.pack.debugseq.debugSeq.DapSwjPins; import com.arm.cmsis.pack.debugseq.debugSeq.DapSwjSequence; import com.arm.cmsis.pack.debugseq.debugSeq.DapWriteABORT; import com.arm.cmsis.pack.debugseq.debugSeq.DebugSeqModel; import com.arm.cmsis.pack.debugseq.debugSeq.DebugVars; import com.arm.cmsis.pack.debugseq.debugSeq.Div; import com.arm.cmsis.pack.debugseq.debugSeq.Equality; import com.arm.cmsis.pack.debugseq.debugSeq.Expression; import com.arm.cmsis.pack.debugseq.debugSeq.IntConstant; import com.arm.cmsis.pack.debugseq.debugSeq.LoadDebugInfo; import com.arm.cmsis.pack.debugseq.debugSeq.Message; import com.arm.cmsis.pack.debugseq.debugSeq.Minus; import com.arm.cmsis.pack.debugseq.debugSeq.Mul; import com.arm.cmsis.pack.debugseq.debugSeq.Not; import com.arm.cmsis.pack.debugseq.debugSeq.Or; import com.arm.cmsis.pack.debugseq.debugSeq.Parameter; import com.arm.cmsis.pack.debugseq.debugSeq.Plus; import com.arm.cmsis.pack.debugseq.debugSeq.Query; import com.arm.cmsis.pack.debugseq.debugSeq.QueryValue; import com.arm.cmsis.pack.debugseq.debugSeq.Read16; import com.arm.cmsis.pack.debugseq.debugSeq.Read32; import com.arm.cmsis.pack.debugseq.debugSeq.Read64; import com.arm.cmsis.pack.debugseq.debugSeq.Read8; import com.arm.cmsis.pack.debugseq.debugSeq.ReadAP; import com.arm.cmsis.pack.debugseq.debugSeq.ReadDP; import com.arm.cmsis.pack.debugseq.debugSeq.Rem; import com.arm.cmsis.pack.debugseq.debugSeq.Sequence; import com.arm.cmsis.pack.debugseq.debugSeq.SequenceCall; import com.arm.cmsis.pack.debugseq.debugSeq.Sequences; import com.arm.cmsis.pack.debugseq.debugSeq.Shift; import com.arm.cmsis.pack.debugseq.debugSeq.Statement; import com.arm.cmsis.pack.debugseq.debugSeq.StringConstant; import com.arm.cmsis.pack.debugseq.debugSeq.Ternary; import com.arm.cmsis.pack.debugseq.debugSeq.VariableDeclaration; import com.arm.cmsis.pack.debugseq.debugSeq.VariableRef; import com.arm.cmsis.pack.debugseq.debugSeq.Write16; import com.arm.cmsis.pack.debugseq.debugSeq.Write32; import com.arm.cmsis.pack.debugseq.debugSeq.Write64; import com.arm.cmsis.pack.debugseq.debugSeq.Write8; import com.arm.cmsis.pack.debugseq.debugSeq.WriteAP; import com.arm.cmsis.pack.debugseq.debugSeq.WriteDP; import com.arm.cmsis.pack.debugseq.generator.IDsqScriptGenerator; import com.arm.cmsis.pack.debugseq.util.DebugSeqUtil; import com.arm.cmsis.pack.dsq.IDsqClient; import com.arm.cmsis.pack.dsq.IDsqContext; import com.google.common.base.Objects; import com.google.common.collect.Iterables; import java.util.Arrays; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.generator.AbstractGenerator; import org.eclipse.xtext.generator.IFileSystemAccess2; import org.eclipse.xtext.generator.IGeneratorContext; import org.eclipse.xtext.xbase.lib.Conversions; import org.eclipse.xtext.xbase.lib.Functions.Function0; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.IterableExtensions; import org.eclipse.xtext.xbase.lib.IteratorExtensions; /** * Generates Python script from Debug access sequence descriptions */ @SuppressWarnings("all") public class DsqPythonScriptGenerator extends AbstractGenerator implements IDsqScriptGenerator { private boolean generateFile = false; private final static String predefinedVars = new Function0<String>() { public String apply() { StringConcatenation _builder = new StringConcatenation(); _builder.append("("); _builder.append(IDsqContext.PROTOCOL, ""); _builder.append(", "); _builder.append(IDsqContext.CONNECTION, ""); _builder.append(", "); _builder.append(IDsqContext.DP, ""); _builder.append(", "); _builder.append(IDsqContext.AP, ""); _builder.append(", "); _builder.append(IDsqContext.TRACEOUT, ""); _builder.append(", "); _builder.append(IDsqContext.ERRORCONTROL, ""); _builder.append(")"); return _builder.toString(); } }.apply(); @Override public String getDescription() { return "Generates Python script to run on Debug Server"; } @Override public String getID() { return "com.arm.cmsis.pack.dsq.engine.generator.python"; } @Override public String getName() { return "Python Generator"; } @Override public void doGenerate(final Resource resource, final IFileSystemAccess2 fsa, final IGeneratorContext context) { TreeIterator<EObject> _allContents = resource.getAllContents(); Iterable<EObject> _iterable = IteratorExtensions.<EObject>toIterable(_allContents); Iterable<DebugSeqModel> _filter = Iterables.<DebugSeqModel>filter(_iterable, DebugSeqModel.class); DebugSeqModel _get = ((DebugSeqModel[])Conversions.unwrapArray(_filter, DebugSeqModel.class))[0]; final String script = this.generate(_get); if (this.generateFile) { fsa.generateFile("debug_sequences.py", script); } } public boolean setGenerateFile(final boolean genFile) { return this.generateFile = genFile; } @Override public String generate(final DebugSeqModel dsqModel, final String header) { StringConcatenation _builder = new StringConcatenation(); _builder.append(header, ""); _builder.newLineIfNotEmpty(); _builder.newLine(); { Sequences _sequences = dsqModel.getSequences(); EList<Sequence> _sequences_1 = _sequences.getSequences(); for(final Sequence sequence : _sequences_1) { String _generate = this.generate(sequence); _builder.append(_generate, ""); _builder.newLineIfNotEmpty(); _builder.newLine(); } } return _builder.toString(); } protected String _generate(final Sequence seq) { StringConcatenation _builder = new StringConcatenation(); _builder.append("def "); String _name = seq.getName(); _builder.append(_name, ""); _builder.append(DsqPythonScriptGenerator.predefinedVars, ""); _builder.append(":"); _builder.newLineIfNotEmpty(); _builder.append(" "); DebugSeqModel _containingDebugSeqModel = DebugSeqUtil.containingDebugSeqModel(seq); DebugVars _debugvars = _containingDebugSeqModel.getDebugvars(); String _generate = this.generate(_debugvars); _builder.append(_generate, " "); _builder.newLineIfNotEmpty(); { EList<CodeBlock> _codeblocks = seq.getCodeblocks(); for(final CodeBlock codeblock : _codeblocks) { _builder.append(" "); String _generate_1 = this.generate(codeblock); _builder.append(_generate_1, " "); _builder.newLineIfNotEmpty(); } } return _builder.toString(); } protected String _generate(final DebugVars gv) { StringConcatenation _builder = new StringConcatenation(); { EList<Statement> _statements = gv.getStatements(); Iterable<VariableDeclaration> _filter = Iterables.<VariableDeclaration>filter(_statements, VariableDeclaration.class); final Function1<VariableDeclaration, Boolean> _function = (VariableDeclaration it) -> { String _name = it.getName(); boolean _isPredefinedVariable = DebugSeqUtil.isPredefinedVariable(_name); return Boolean.valueOf((!_isPredefinedVariable)); }; Iterable<VariableDeclaration> _filter_1 = IterableExtensions.<VariableDeclaration>filter(_filter, _function); for(final VariableDeclaration vardecl : _filter_1) { String _generate = this.generate(vardecl); _builder.append(_generate, ""); _builder.newLineIfNotEmpty(); } } { EList<Statement> _statements_1 = gv.getStatements(); Iterable<Expression> _filter_2 = Iterables.<Expression>filter(_statements_1, Expression.class); for(final Expression expr : _filter_2) { String _generate_1 = this.generate(expr); _builder.append(_generate_1, ""); _builder.newLineIfNotEmpty(); } } return _builder.toString(); } protected String _generate(final Block block) { StringConcatenation _builder = new StringConcatenation(); { EList<Statement> _statements = block.getStatements(); int _size = _statements.size(); boolean _tripleEquals = (_size == 0); if (_tripleEquals) { _builder.append("pass"); _builder.newLine(); } } { EList<Statement> _statements_1 = block.getStatements(); for(final Statement stmt : _statements_1) { String _generate = this.generate(stmt); _builder.append(_generate, ""); _builder.newLineIfNotEmpty(); } } return _builder.toString(); } protected String _generate(final Control control) { StringConcatenation _builder = new StringConcatenation(); { Expression _if = control.getIf(); boolean _tripleNotEquals = (_if != null); if (_tripleNotEquals) { _builder.append("if "); Expression _if_1 = control.getIf(); String _generate = this.generate(_if_1); _builder.append(_generate, ""); _builder.append(":"); _builder.newLineIfNotEmpty(); { Expression _while = control.getWhile(); boolean _tripleNotEquals_1 = (_while != null); if (_tripleNotEquals_1) { _builder.append(" "); String _generateControlWhile = this.generateControlWhile(control); _builder.append(_generateControlWhile, " "); _builder.newLineIfNotEmpty(); } else { { EList<CodeBlock> _codeblocks = control.getCodeblocks(); int _size = _codeblocks.size(); boolean _tripleEquals = (_size == 0); if (_tripleEquals) { _builder.append(" "); _builder.append("pass"); _builder.newLine(); } } { EList<CodeBlock> _codeblocks_1 = control.getCodeblocks(); for(final CodeBlock codeblock : _codeblocks_1) { _builder.append(" "); String _generate_1 = this.generate(codeblock); _builder.append(_generate_1, " "); _builder.newLineIfNotEmpty(); } } } } } else { Expression _while_1 = control.getWhile(); boolean _tripleNotEquals_2 = (_while_1 != null); if (_tripleNotEquals_2) { String _generateControlWhile_1 = this.generateControlWhile(control); _builder.append(_generateControlWhile_1, ""); _builder.newLineIfNotEmpty(); } else { { EList<CodeBlock> _codeblocks_2 = control.getCodeblocks(); for(final CodeBlock codeblock_1 : _codeblocks_2) { String _generate_2 = this.generate(codeblock_1); _builder.append(_generate_2, ""); _builder.newLineIfNotEmpty(); } } } } } return _builder.toString(); } private String generateControlWhile(final Control control) { StringConcatenation _builder = new StringConcatenation(); { long _timeout = control.getTimeout(); boolean _tripleNotEquals = (_timeout != 0); if (_tripleNotEquals) { _builder.append("t = Timer()"); _builder.newLine(); } } _builder.append("while ("); Expression _while = control.getWhile(); String _generate = this.generate(_while); _builder.append(_generate, ""); _builder.append(")"); { long _timeout_1 = control.getTimeout(); boolean _tripleNotEquals_1 = (_timeout_1 != 0); if (_tripleNotEquals_1) { _builder.append(" and t.getTime() < "); long _timeout_2 = control.getTimeout(); _builder.append(_timeout_2, ""); } } _builder.append(":"); _builder.newLineIfNotEmpty(); { EList<CodeBlock> _codeblocks = control.getCodeblocks(); for(final CodeBlock codeblock : _codeblocks) { String _generate_1 = this.generate(codeblock); _builder.append(_generate_1, ""); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append("continue"); _builder.newLine(); return _builder.toString(); } protected String _generate(final VariableDeclaration vd) { StringConcatenation _builder = new StringConcatenation(); String _name = vd.getName(); _builder.append(_name, ""); _builder.append(" = "); Expression _value = vd.getValue(); String _generate = this.generate(_value); _builder.append(_generate, ""); return _builder.toString(); } protected String _generate(final Expression e) { String _switchResult = null; boolean _matched = false; if (e instanceof IntConstant) { _matched=true; StringConcatenation _builder = new StringConcatenation(); long _value = ((IntConstant)e).getValue(); _builder.append(_value, ""); _switchResult = _builder.toString(); } if (!_matched) { if (e instanceof StringConstant) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("\""); String _value = ((StringConstant)e).getValue(); _builder.append(_value, ""); _builder.append("\""); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof VariableRef) { _matched=true; StringConcatenation _builder = new StringConcatenation(); VariableDeclaration _variable = ((VariableRef)e).getVariable(); String _name = _variable.getName(); _builder.append(_name, ""); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Not) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("not ("); Expression _expression = ((Not)e).getExpression(); String _generate = this.generate(_expression); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Assignment) { _matched=true; StringConcatenation _builder = new StringConcatenation(); Expression _left = ((Assignment)e).getLeft(); VariableDeclaration _variable = ((VariableRef) _left).getVariable(); String _name = _variable.getName(); _builder.append(_name, ""); _builder.append(" "); String _op = ((Assignment)e).getOp(); _builder.append(_op, ""); _builder.append(" "); Expression _right = ((Assignment)e).getRight(); String _generate = this.generate(_right); _builder.append(_generate, ""); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Ternary) { _matched=true; StringConcatenation _builder = new StringConcatenation(); Expression _exp1 = ((Ternary)e).getExp1(); String _generate = this.generate(_exp1); _builder.append(_generate, ""); _builder.append(" if ("); Expression _left = ((Ternary)e).getLeft(); String _generate_1 = this.generate(_left); _builder.append(_generate_1, ""); _builder.append(") != 0 else "); Expression _exp2 = ((Ternary)e).getExp2(); String _generate_2 = this.generate(_exp2); _builder.append(_generate_2, ""); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Or) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((Or)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") != 0 or ("); Expression _right = ((Or)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(") != 0"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof And) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((And)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") != 0 and ("); Expression _right = ((And)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(") != 0"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof BitOr) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((BitOr)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") | ("); Expression _right = ((BitOr)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof BitXor) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((BitXor)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") ^ ("); Expression _right = ((BitXor)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof BitAnd) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((BitAnd)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") & ("); Expression _right = ((BitAnd)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof BitNot) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("~("); Expression _expression = ((BitNot)e).getExpression(); String _generate = this.generate(_expression); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Equality) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((Equality)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") "); String _op = ((Equality)e).getOp(); _builder.append(_op, ""); _builder.append(" ("); Expression _right = ((Equality)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Comparison) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((Comparison)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") "); { String _op = ((Comparison)e).getOp(); boolean _equals = Objects.equal(_op, "<"); if (_equals) { _builder.append(" < "); } else { String _op_1 = ((Comparison)e).getOp(); boolean _equals_1 = Objects.equal(_op_1, ">"); if (_equals_1) { _builder.append(" > "); } else { String _op_2 = ((Comparison)e).getOp(); boolean _equals_2 = Objects.equal(_op_2, "<="); if (_equals_2) { _builder.append(" <= "); } else { _builder.append(" >= "); } } } } _builder.append(" ("); Expression _right = ((Comparison)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Shift) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((Shift)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") "); { String _op = ((Shift)e).getOp(); boolean _equals = Objects.equal(_op, "<<"); if (_equals) { _builder.append(" << "); } else { _builder.append(" >> "); } } _builder.append(" ("); Expression _right = ((Shift)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Plus) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((Plus)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") + ("); Expression _right = ((Plus)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Minus) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((Minus)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") - ("); Expression _right = ((Minus)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Mul) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((Mul)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") * ("); Expression _right = ((Mul)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Div) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((Div)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") / ("); Expression _right = ((Div)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Rem) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("("); Expression _left = ((Rem)e).getLeft(); String _generate = this.generate(_left); _builder.append(_generate, ""); _builder.append(") % ("); Expression _right = ((Rem)e).getRight(); String _generate_1 = this.generate(_right); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof SequenceCall) { _matched=true; StringConcatenation _builder = new StringConcatenation(); String _seqname = ((SequenceCall)e).getSeqname(); _builder.append(_seqname, ""); _builder.append(DsqPythonScriptGenerator.predefinedVars, ""); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Query) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("DS.Query("); Expression _type = ((Query)e).getType(); String _generate = this.generate(_type); _builder.append(_generate, ""); _builder.append(", \""); String _message = ((Query)e).getMessage(); _builder.append(_message, ""); _builder.append("\", "); Expression _default = ((Query)e).getDefault(); String _generate_1 = this.generate(_default); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof QueryValue) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("DS.Query("); _builder.append(IDsqClient.QUERY_VALUE_TYPE, ""); _builder.append(", \""); String _message = ((QueryValue)e).getMessage(); _builder.append(_message, ""); _builder.append("\", "); Expression _default = ((QueryValue)e).getDefault(); String _generate = this.generate(_default); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof LoadDebugInfo) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("LoadDebugInfo(\""); String _path = ((LoadDebugInfo)e).getPath(); _builder.append(_path, ""); _builder.append("\")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Message) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("Message(\""); String _format = ((Message)e).getFormat(); _builder.append(_format, ""); _builder.append("\""); { EList<Parameter> _parameters = ((Message)e).getParameters(); for(final Parameter p : _parameters) { _builder.append(", "); String _generate = this.generate(p); _builder.append(_generate, ""); } } _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Read8) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("Read8("); Expression _addr = ((Read8)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Read16) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("Read16("); Expression _addr = ((Read16)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Read32) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("Read32("); Expression _addr = ((Read32)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Read64) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("Read64("); Expression _addr = ((Read64)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof ReadAP) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("ReadAP("); Expression _addr = ((ReadAP)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof ReadDP) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("ReadDP("); Expression _addr = ((ReadDP)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Write8) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("Write8("); Expression _addr = ((Write8)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(", "); Expression _val = ((Write8)e).getVal(); String _generate_1 = this.generate(_val); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Write16) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("Write16("); Expression _addr = ((Write16)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(", "); Expression _val = ((Write16)e).getVal(); String _generate_1 = this.generate(_val); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Write32) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("Write32("); Expression _addr = ((Write32)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(", "); Expression _val = ((Write32)e).getVal(); String _generate_1 = this.generate(_val); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof Write64) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("Write64("); Expression _addr = ((Write64)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(", "); Expression _val = ((Write64)e).getVal(); String _generate_1 = this.generate(_val); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof WriteAP) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("WriteAP("); Expression _addr = ((WriteAP)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(", "); Expression _val = ((WriteAP)e).getVal(); String _generate_1 = this.generate(_val); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof WriteDP) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("WriteDP("); Expression _addr = ((WriteDP)e).getAddr(); String _generate = this.generate(_addr); _builder.append(_generate, ""); _builder.append(", "); Expression _val = ((WriteDP)e).getVal(); String _generate_1 = this.generate(_val); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof DapDelay) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("DAP_Delay("); Expression _delay = ((DapDelay)e).getDelay(); String _generate = this.generate(_delay); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof DapWriteABORT) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("DAP_WriteABORT("); Expression _value = ((DapWriteABORT)e).getValue(); String _generate = this.generate(_value); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof DapSwjPins) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("DAP_SWJ_Pins("); Expression _pinout = ((DapSwjPins)e).getPinout(); String _generate = this.generate(_pinout); _builder.append(_generate, ""); _builder.append(", "); Expression _pinselect = ((DapSwjPins)e).getPinselect(); String _generate_1 = this.generate(_pinselect); _builder.append(_generate_1, ""); _builder.append(", "); Expression _pinwait = ((DapSwjPins)e).getPinwait(); String _generate_2 = this.generate(_pinwait); _builder.append(_generate_2, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof DapSwjClock) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("DAP_SWJ_Clock("); Expression _value = ((DapSwjClock)e).getValue(); String _generate = this.generate(_value); _builder.append(_generate, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof DapSwjSequence) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("DAP_SWJ_Sequence("); Expression _cnt = ((DapSwjSequence)e).getCnt(); String _generate = this.generate(_cnt); _builder.append(_generate, ""); _builder.append(", "); Expression _val = ((DapSwjSequence)e).getVal(); String _generate_1 = this.generate(_val); _builder.append(_generate_1, ""); _builder.append(")"); _switchResult = _builder.toString(); } } if (!_matched) { if (e instanceof DapJtagSequence) { _matched=true; StringConcatenation _builder = new StringConcatenation(); _builder.append("DAP_JTAG_Sequence("); Expression _cnt = ((DapJtagSequence)e).getCnt(); String _generate = this.generate(_cnt); _builder.append(_generate, ""); _builder.append(", "); Expression _tms = ((DapJtagSequence)e).getTms(); String _generate_1 = this.generate(_tms); _builder.append(_generate_1, ""); _builder.append(", "); Expression _tdi = ((DapJtagSequence)e).getTdi(); String _generate_2 = this.generate(_tdi); _builder.append(_generate_2, ""); _builder.append(")"); _switchResult = _builder.toString(); } } return _switchResult; } public String generate(final EObject block) { if (block instanceof Block) { return _generate((Block)block); } else if (block instanceof Control) { return _generate((Control)block); } else if (block instanceof Expression) { return _generate((Expression)block); } else if (block instanceof VariableDeclaration) { return _generate((VariableDeclaration)block); } else if (block instanceof DebugVars) { return _generate((DebugVars)block); } else if (block instanceof Sequence) { return _generate((Sequence)block); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(block).toString()); } } }