public Deserialize ( SerializedSignature ss, |
||
ss | SerializedSignature | |
frame | ||
Результат | FunctionType |
public Tuple<int?, SystemService> ParseLine() { try { int? ordinal = ParseOrdinal(); string callconv = ParseCallingConvention(); var options = ParseOptions(); var tok = Get(); string fnName = tok.Value; var ssig = new SerializedSignature { Convention = callconv, }; ssig.Arguments = ParseParameters(ssig); SkipToEndOfLine(); var deser = new X86ProcedureSerializer((IntelArchitecture)platform.Architecture, tlLoader, callconv); var sig = deser.Deserialize(ssig, new Frame(platform.FramePointerType)); var svc = new SystemService { ModuleName = moduleName.ToUpper(), Name = fnName, Signature = sig }; return Tuple.Create(ordinal, svc); } catch { Services.RequireService<DecompilerEventListener>().Warn( new NullCodeLocation(moduleName), "Line {0} in the Wine spec file could not be read; skipping.", lexer.lineNumber); SkipToEndOfLine(); return null; } }
public void ParseLine() { var tok = Peek(); if (tok.Type == TokenType.NUMBER) { tok = Get(); int ordinal = Convert.ToInt32(tok.Value); Expect(TokenType.ID); if (PeekAndDiscard(TokenType.MINUS)) { Expect(TokenType.ID); } tok = Get(); string fnName = tok.Value; var ssig = new SerializedSignature { Convention = "pascal" }; var args = new List<Argument_v1>(); if (PeekAndDiscard(TokenType.LPAREN)) { while (LoadParameter(ssig, args)) ; Expect(TokenType.RPAREN); } ssig.Arguments = args.ToArray(); var deser = new X86ProcedureSerializer((IntelArchitecture) platform.Architecture, tlLoader, "pascal"); var sig = deser.Deserialize(ssig, new Frame(PrimitiveType.Word16)); var svc = new SystemService { Name = fnName, Signature = sig }; tlLoader.LoadService(ordinal, svc); } for (;;) { // Discared entire line. var type = Get().Type; if (type == TokenType.EOF || type == TokenType.NL) return; } }
public void ParseLine() { int? ordinal = ParseOrdinal(); string callconv = ParseCallingConvention(); var options = ParseOptions(); var tok = Get(); string fnName = tok.Value; var ssig = new SerializedSignature { Convention = callconv, }; ssig.Arguments = ParseParameters(ssig); var deser = new X86ProcedureSerializer((IntelArchitecture)platform.Architecture, tlLoader, callconv); var sig = deser.Deserialize(ssig, new Frame(platform.FramePointerType)); var svc = new SystemService { ModuleName = moduleName.ToUpper(), Name = fnName, Signature = sig }; if (ordinal.HasValue) { tlLoader.LoadService(ordinal.Value, svc); } else { tlLoader.LoadService(fnName, svc); } for (;;) { // Discared entire line. var type = Get().Type; if (type == TokenType.EOF || type == TokenType.NL) return; } }