neoneo-go/pkg
Evgeniy Stratonikov 304900e765 compiler: improve debugging experience
Currently one instruction can correspond to multiple sequence points
because of inlining. This leads to a bad user experience as only
the last one is used. In this commit we create a sequence point for each
inlined call and also make sure that each time a new sequence point is
created the corresponding opcode can easily be seen in code.

The NOPs increase contract size, but not to a large degree. Other
solutions considered:
1. Discard NOPs if a special flag is provided. Still leads to bad
   debugging experience if deployed contract differs from the debugged
   one.
2. Create an issue for a debugger. When multiple sequence points are
   provided for a single instruction they can be used to emulate
   non-inline behaviour with pseudo-NOPs. I believe this is what windows
   debugger does (the last paragraph https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugging-optimized-code-and-inline-functions-external )
3. Emit debug info for inlined functions even without creating a
   function in the NEF itself. This should be done for each called
   instance and would also create overlapping opcode ranges for
   the enclosing function. However this approach can also ensure
   consistent values view for inlined function parameters.

Signed-off-by: Evgeniy Stratonikov <evgeniy@nspcc.ru>
2022-04-14 13:48:24 +03:00
..
compiler compiler: improve debugging experience 2022-04-14 13:48:24 +03:00
config *: remove io/ioutil uses 2022-03-17 19:39:18 +03:00
consensus config/core: allow to change the number of validators 2022-01-31 23:14:38 +03:00
core core: add murmur32 to CryptoLib native contract 2022-04-05 10:46:52 +03:00
crypto core: drop GetStandBy* methods 2022-01-31 23:14:38 +03:00
encoding *: use internal variables for simple big.NewInt() values 2021-12-01 21:36:25 +03:00
interop Merge pull request #2417 from nspcc-dev/interop-update 2022-04-05 19:02:59 +03:00
io io: optimize WriteString, avoid allocation 2021-12-01 21:36:25 +03:00
neotest core: rebase core tests onto neotest 2022-03-30 19:00:53 +03:00
network network: check compressed payload size in decompress 2022-03-24 17:22:55 +03:00
rpc rpc: avoid panic on double-call to *WSClient.Close() 2022-04-05 16:31:51 +03:00
services services: fix changing of main tx size of Notary request 2022-04-05 16:00:12 +03:00
smartcontract smartcontract: remove unused ParameterFromStackItem 2022-04-01 08:38:35 +03:00
util util: allow to marshal Uint160 in YAML 2022-02-21 10:38:20 +03:00
vm vm: make byte representation of VMState compatible with C# 2022-04-04 13:52:29 +03:00
wallet *: remove io/ioutil uses 2022-03-17 19:39:18 +03:00