neoneo-go/pkg/vm/stack
Roman Khimov f068f4c0ed pkg/vm/stack: drop unused (*RandomAccess).items()
GolangCI complains:
  U1000: func (*RandomAccess).items is unused

And it looks like everyone and their dog just use ras.vals without any
wrappers when there is a need to access it, so drop the wrapper.
2019-08-12 18:19:26 +03:00
..
array.go pkg/vm/stack: improve Array testing code slightly 2019-08-12 17:12:05 +03:00
array_test.go pkg/vm/stack: improve Array testing code slightly 2019-08-12 17:12:05 +03: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 Merge branch 'vm' into dauTT/vm-NOP-JMP-JMPIF-JMPIFNOT-opcodes 2019-08-12 12:42:21 +03:00
instruction.go Move opcode file 2019-03-15 22:35:12 +00:00
Int.go pkg/vm/stack: fix S1008 gosimple warning from GolangCI 2019-08-12 18:05:04 +03:00
int_test.go pkg/vm/stack: fix unused binary.Read() result in testReadInt64() 2019-08-12 17:56:51 +03:00
invocationstack.go [Stack] 2019-03-18 21:15:09 +00:00
map.go pkg/vm/stack: fix S1002 gosimple warnings in map.go 2019-08-12 18:08:39 +03:00
map_test.go pkg/vm/stack: improve Array testing code slightly 2019-08-12 17:12:05 +03:00
Readme.md - Add guide to stack readme 2019-02-28 13:51:02 +00:00
stack.go pkg/vm/stack: drop unused (*RandomAccess).items() 2019-08-12 18:19:26 +03:00
stack_test.go pkg/vm/stack: fix SA4006 GolangCI warning in TestStackPushPop() 2019-08-12 18:13:04 +03: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 pkg/vm/stack: fix unused binary.Read() result in testReadInt64() 2019-08-12 17:56:51 +03: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 }