public bool VisitNode(PostOpReference node) { ExpressionPrescedence.Push(NOPRESCEDENCE); // ExpressionOperatorkeyword node.Operand.AcceptVisitor(this); Append("{0}", node.Operator.OperatorKeyword); ExpressionPrescedence.Pop(); return(true); }
public Expression DecompileNativeFunction(ushort index) { var parameters = new List <Expression>(); while (!CurrentIs(OpCodes.EndFunctionParms)) { var param = DecompileExpression(); if (param == null) { return(null); // ERROR } parameters.Add(param); } PopByte(); var entry = NativeTable[index]; Expression call = null; switch (entry.Type) { case NativeType.Function: var func = new SymbolReference(null, entry.Name); call = new FunctionCall(func, parameters, null, null); break; case NativeType.Operator: var op = new InOpDeclaration(entry.Name, entry.Precedence, index, null, null, null); var opRef = new InOpReference(op, parameters[0], parameters[1]); DecompileEnumOperatorComparisons(opRef); call = opRef; break; case NativeType.PreOperator: var preOp = new PreOpDeclaration(entry.Name, null, index, null); call = new PreOpReference(preOp, parameters[0]); break; case NativeType.PostOperator: var postOp = new PostOpDeclaration(entry.Name, null, index, null); call = new PostOpReference(postOp, parameters[0], null, null); break; } StartPositions.Pop(); return(call); }
public Expression DecompileNativeFunction(UInt16 index) { var parameters = new List <Expression>(); while (!CurrentIs(StandardByteCodes.EndFunctionParms)) { var param = DecompileExpression(); if (param == null) { return(null); // ERROR } parameters.Add(param); } PopByte(); var entry = NativeTable[index]; Expression call = null; switch (entry.Type) { case NativeType.Function: var func = new SymbolReference(null, null, null, entry.Name); call = new FunctionCall(func, parameters, null, null); break; case NativeType.Operator: // TODO: table should hold precedence, currently all have 0 and it'll be a mess. var op = new InOpDeclaration(entry.Name, entry.Precedence, false, null, null, null, null, null, null, null); call = new InOpReference(op, parameters[0], parameters[1], null, null); break; case NativeType.PreOperator: // TODO: table should hold precedence, currently all have 0 and it'll be a mess. var preOp = new PreOpDeclaration(entry.Name, false, null, null, null, null, null, null); call = new PreOpReference(preOp, parameters[0], null, null); break; case NativeType.PostOperator: // TODO: table should hold precedence, currently all have 0 and it'll be a mess. var postOp = new PostOpDeclaration(entry.Name, false, null, null, null, null, null, null); call = new PostOpReference(postOp, parameters[0], null, null); break; } StartPositions.Pop(); return(call); }
public bool VisitNode(PostOpReference node) { throw new NotImplementedException(); }