neoneo-go/pkg/vm/stack
DauTT c6cd0e0c21 Implemented Map Stack Item:
1) Added new file map.go, map_test.go
2) Added Map, Hash Method to Item interface
3) Implemented Hash Method for every stack items (Boolean, Array, Int, ...)
2019-04-02 22:38:41 +02:00
..
array.go Implemented Map Stack Item: 2019-04-02 22:38:41 +02:00
boolean.go Implemented Map Stack Item: 2019-04-02 22:38:41 +02:00
builder.go Add Builder 2019-03-15 22:27:34 +00:00
bytearray.go Implemented Map Stack Item: 2019-04-02 22:38:41 +02:00
context.go Implemented Map Stack Item: 2019-04-02 22:38:41 +02:00
instruction.go Move opcode file 2019-03-15 22:35:12 +00:00
Int.go Implemented Map Stack Item: 2019-04-02 22:38:41 +02:00
int_test.go Refactor Int, Boolean, ByteArray conversion 2019-03-15 22:30:25 +00:00
invocationstack.go [Stack] 2019-03-18 21:15:09 +00:00
map.go Implemented Map Stack Item: 2019-04-02 22:38:41 +02:00
map_test.go Implemented Map Stack Item: 2019-04-02 22:38:41 +02:00
Readme.md - Add guide to stack readme 2019-02-28 13:51:02 +00:00
stack.go VM: Implement, ABS, NOT opcode (#233) 2019-03-28 19:26:55 +00:00
stack_test.go VM: removed helper functions from stack_test.go 2019-02-27 21:40:31 +00:00
stackitem.go Implemented Map Stack Item: 2019-04-02 22:38:41 +02:00
stackitem_test.go VM: Add tests for stack item 2019-02-27 20:56:19 +00:00
test_helper.go Implemented Map Stack Item: 2019-04-02 22:38:41 +02:00

VM - Stack

  • How do i implement a new StackItem?

Answer: You add it's type to the Item interface, then you implement the default return method on the abstract stack item, this should be the behaviour of the stack item, if it is not the new type. Then you embed the abstract item in the new struct and override the method.

For example, If I wanted to add a new type called HashMap

type Item interface{ HashMap()(*HashMap, error) }

func (a *abstractItem) HashMap() (*HashMap, error) { return nil, errors.New(This stack item is not a hashmap) }

type HashMap struct { *abstractItem // Variables needed for hashmap }

func (h *HashMap) HashMap()(*HashMap, error) { // logic to override default behaviour }