Evgenii Stratonikov
439d9ff94d
compiler: initialize packages according to go spec
...
`init()` functions should be called during package initialization,
after global variables were processed.
2020-08-05 11:15:07 +03:00
Evgenii Stratonikov
6f2759be3a
compiler: process packages in deterministic order
2020-08-05 11:00:25 +03:00
Evgenii Stratonikov
b771d2d024
compiler: allow to use init
function
...
Process `init()` functions after global variables has been processed.
It's body is saved into the `_initialize` method where all
initialization is performed.
2020-08-05 11:00:25 +03:00
Roman Khimov
ef53a45e7a
Merge pull request #1264 from nspcc-dev/smartcontract/manifest/supported_standards
...
smartcontract: add list of supported standards to manifest
2020-08-04 22:17:00 +03:00
Anna Shaleva
66ceaa6b75
smartcontract: add list of supported standards to manifest
...
Closes #1204
2020-08-04 17:29:44 +03:00
Roman Khimov
fa5ff8dd95
Merge pull request #1242 from nspcc-dev/fix/json
...
Implement lossless stackitem to json conversion
2020-08-04 12:59:47 +03:00
Roman Khimov
00671deb8f
Merge pull request #1241 from nspcc-dev/fix/string
...
Ensure strings are valid UTF-8 where appropriate
2020-08-03 18:10:27 +03:00
Evgenii Stratonikov
b53f0257f5
stackitem: change ByteArray type to ByteString
...
Adjust only string representation.
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2020-07-31 16:07:16 +03:00
Evgenii Stratonikov
a781d299e0
compiler: use fully-qualified names for tracking functions
...
Function name now consists of 3 parts:
1) full package path
2) method receiver type (if any)
3) function name itself .
Fix #1150 .
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2020-07-31 12:07:06 +03:00
Evgenii Stratonikov
528c184f00
compiler: allow to use exported constants
...
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2020-07-31 12:06:42 +03:00
Evgenii Stratonikov
6df019913d
compiler: allow to use exported variables
...
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2020-07-31 12:06:42 +03:00
Evgenii Stratonikov
b8d7e93459
compiler: make ForEachFile
accept a package
...
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2020-07-31 12:06:42 +03:00
Evgenii Stratonikov
ac040a6f22
compiler: remove unused resolveEntryPoint
...
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2020-07-31 12:06:42 +03:00
Evgenii Stratonikov
7009417325
compiler: allow to declare global variables in multiple files
...
Traverse and count globals across all used files.
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2020-07-31 12:06:42 +03:00
Evgenii Stratonikov
f40aba4cd0
vm: convert items to UTF-8 strings
...
Add `stackitem.ToString` for seamless string conversion.
2020-07-30 12:37:31 +03:00
Evgenii Stratonikov
51ae12e4fd
*: move syscall handling out of VM
...
Remove interop-related structures from the `vm` package.
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2020-07-29 13:41:08 +03:00
Evgenii Stratonikov
685d44dbc1
*: support _initialize
method in contracts
...
Invoke `_initialize` method on every call if present.
In NEO3 there is no entrypoint and methods are invoked by offset,
thus `Main` function is no longer required.
We still have special `Main` method in tests to simplify them.
2020-07-27 13:00:35 +03:00
Evgenii Stratonikov
d2ddf7b7cb
*: support invoking methods by offset
...
Allow to invoke methods by offset:
1. Every invoked contract must have manifest.
2. Check arguments count on invocation.
3. Change AppCall to a regular syscall.
4. Add test suite for `System.Contract.Call`.
2020-07-27 13:00:35 +03:00
Evgenii Stratonikov
e87eba51f9
compiler: emit bytecode for unused exported functions
...
Exported functions should always be present in byte-code.
This will be needed later when arbitrary method calls are allowed.
2020-07-27 13:00:35 +03:00
Evgenii Stratonikov
04bf357fa5
compiler: make DebugInfo.convertToManifest public
...
Allow to generate manifest when using compiler as a library.
2020-07-27 11:08:01 +03:00
Evgenii Stratonikov
a892e3ffa8
manifest: add Offset in method descriptor
2020-07-27 11:08:01 +03:00
Evgenii Stratonikov
e52c39ae7e
manifest: remove EntryPoint from manifest
2020-07-27 11:08:01 +03:00
Roman Khimov
2800179ce0
Merge pull request #1226 from nspcc-dev/fix/pusha
...
vm: make offset in PUSHA relative
2020-07-23 23:40:21 +03:00
Roman Khimov
d8a1c3de46
Merge pull request #1221 from nspcc-dev/neo3/interop/post-preview2_adjustment3
...
interop: post-preview2 adjustment, part 3
2020-07-23 20:35:53 +03:00
Evgenii Stratonikov
b8843a2dfa
vm: make offset in PUSHA relative
...
Follow neo-project/neo-vm#317 .
2020-07-23 13:07:30 +03:00
Roman Khimov
18dcc16553
Merge pull request #1222 from nspcc-dev/fix/rvcount
...
Remove return value count
2020-07-23 10:34:34 +03:00
Anna Shaleva
76acef18ad
core: adjust System.Runtime.Platform interop
...
Part of #1055 .
Added `Platform` method to compiler.
2020-07-23 07:51:24 +03:00
Anna Shaleva
2bbe218547
compiler: move SHA256 from builtins to syscalls
...
Now it can be processed as a normal syscall.
2020-07-22 16:58:32 +03:00
Anna Shaleva
b8d82b49ec
core: add Neo.Crypto.RIPEMD160 interop
...
Closes #1193 .
2020-07-22 16:58:32 +03:00
Anna Shaleva
84bf87df52
core: adjust System.Storage.PutEx interop
...
Part of #1055 .
Added System.Storage.PutEx to compiler. Added StorageFlag in order to
denote whether item is constant or not.
2020-07-22 16:58:23 +03:00
Evgenii Stratonikov
261ff3c655
vm: remove alt.stack
...
It is no longer present in NEO3.
2020-07-22 13:20:31 +03:00
Evgenii Stratonikov
3d7fa9de93
*: make Notify interop accept event name
2020-07-20 13:33:32 +03:00
Anna Shaleva
74d2f437f4
core: add System.Binary.Base64Encode(Decode) interops
...
Part of #1055
2020-07-17 12:36:18 +03:00
Anna Shaleva
f31ce9289d
core: add System.Contract.GetCallFlags interop
...
Part of #1055 .
It returns calling flags of the current context.
2020-07-17 12:35:02 +03:00
Anna Shaleva
fddad0b475
core: adjust System.Contract.Create interop
...
Part of #1055 .
It should check given scripthash against manifest groups and return the
contract state as a struct (not interop interface).
2020-07-17 09:28:52 +03:00
Anna Shaleva
d2ec0fed3d
core: adjust System.Blockchain.GetContract interop
...
Part of #1055 .
It should put on stack an array instead of interop interface.
2020-07-17 09:28:52 +03:00
Anna Shaleva
a1f98f92fe
compiler: add ConvertResultToStruct flag
...
Part of #1055 .
There'll be a lot of interops which result with a struct on stack instead
of interop interface, and sometimes their names are the same, so it's
unrelyable to take into account interop name only and don't pay
attention to it's API (package).
Also sort syscalls by package and name.
2020-07-17 08:19:43 +03:00
Anna Shaleva
063a7f683c
compiler: add CheckMultisig interops
...
Part of #918
2020-07-14 16:21:38 +03:00
Anna Shaleva
a3e306ff78
core: implement Secp256k1 Verify and CheckMultisig interops
...
Closes #918 .
2020-07-14 16:21:34 +03:00
Anna Shaleva
17233e1d8e
core: rename Neo.Crypto.Verify to Neo.Crypto.VerifyWithECDsaSecp256r1
...
Part of #918
2020-07-14 16:19:12 +03:00
Anna Shaleva
c4f7b06974
core, compiler: return struct from GetScriptContainer interop
...
Closes #1173
2020-07-14 06:04:48 +03:00
Roman Khimov
bc1d6791b9
compiler: allow to append multiple elements
2020-07-09 13:59:43 +03:00
Roman Khimov
76925fe3e0
compiler: slices must default to nil
2020-07-09 13:07:21 +03:00
Roman Khimov
eee8ac1655
compiler: fix initialization of struct fields, fix #1164
...
Make `s{}` initializers work. Deduplicate code a bit along the way. The test
added follows bf6aa02dcf
test.
2020-07-09 12:27:21 +03:00
Anna Shaleva
56a5c9db11
compiler: compile appcall with dynamic argument
...
Closes #1160
2020-07-08 19:49:14 +03:00
Roman Khimov
694963d607
compiler: fix binary.* syscalls compilation, fix #1152
...
They were attributed to a wrong package.
2020-07-07 21:57:51 +03:00
Roman Khimov
ebe37d1a46
compiler: check for NULL when calculating len(), fix #1153
2020-07-07 21:49:21 +03:00
Anna Shaleva
2200f7ff71
compiler: lowercase the first letter of methods in manifest
...
In order to be compatable with NEP5 standards and C# node we have to
keep the first letter of each manifest method lowercased.
2020-07-07 13:44:47 +03:00
Anna Shaleva
f37831d173
compiler: convert to manifest only methods from main pkg
...
manifest.json should contain only methods from the package where `Main`
function located.
2020-07-07 13:42:15 +03:00
Anna Shaleva
c2dccb6314
compiler: add ability to emit package to debug info
...
Emit package information into MethodDebugInfo
2020-07-07 13:39:58 +03:00