public bool VisitNode(StopStatement node) { // stop; Write("stop"); return true; }
public bool VisitNode(StopStatement node) { throw new NotImplementedException(); }
public Statement DecompileStatement() { StartPositions.Push((UInt16)Position); var token = CurrentByte; switch (token) { // return [expression]; case (byte)StandardByteCodes.Return: return DecompileReturn(); // switch (expression) case (byte)StandardByteCodes.Switch: return DecompileSwitch(); // case expression : case (byte)StandardByteCodes.Case: return DecompileCase(); // if (expression) // while / for / do until case (byte)StandardByteCodes.JumpIfNot: return DecompileConditionalJump(); // continue case (byte)StandardByteCodes.Jump: // TODO: UDK seems to compile this from break when inside ForEach, handle? return DecompileJump(); // continue (iterator) case (byte)StandardByteCodes.IteratorNext: PopByte(); // pop iteratornext token return DecompileJump(); // break; case (byte)StandardByteCodes.IteratorPop: return DecompileIteratorPop(); // stop; case (byte)StandardByteCodes.Stop: PopByte(); var stopStatement = new StopStatement(null, null); StatementLocations.Add(StartPositions.Pop(), stopStatement); return stopStatement; // Goto label case (byte)StandardByteCodes.GotoLabel: PopByte(); var labelExpr = DecompileExpression(); var func = new SymbolReference(null, null, null, "goto"); var call = new FunctionCall(func, new List<Expression>() { labelExpr }, null, null); var gotoLabel = new ExpressionOnlyStatement(null, null, call); StatementLocations.Add(StartPositions.Pop(), gotoLabel); return gotoLabel; // assignable expression = expression; case (byte)StandardByteCodes.Let: case (byte)StandardByteCodes.LetBool: case (byte)StandardByteCodes.LetDelegate: return DecompileAssign(); // [skip x bytes] case (byte)StandardByteCodes.Skip: // TODO: this should never occur as statement, possibly remove? PopByte(); ReadUInt16(); StartPositions.Pop(); return DecompileStatement(); case (byte)StandardByteCodes.Nothing: PopByte(); StartPositions.Pop(); return DecompileStatement(); // TODO, should probably have a nothing expression or statement, this is ugly // foreach IteratorFunction(...) case (byte)StandardByteCodes.Iterator: return DecompileForEach(); // foreach arrayName(valuevariable[, indexvariable]) case (byte)StandardByteCodes.DynArrayIterator: return DecompileForEach(isDynArray: true); case (byte)StandardByteCodes.LabelTable: DecompileLabelTable(); StartPositions.Pop(); return DecompileStatement(); #region unsupported case (byte)StandardByteCodes.OptIfLocal: // TODO: verify, handle syntax return DecompileConditionalJump(isOpt: true); case (byte)StandardByteCodes.OptIfInstance: // TODO: verify, handle syntax return DecompileConditionalJump(isOpt: true); #endregion default: var expr = DecompileExpression(); if (expr != null) { var statement = new ExpressionOnlyStatement(null, null, expr); StatementLocations.Add(StartPositions.Pop(), statement); return statement; } // ERROR! break; } return null; }