aboutsummaryrefslogtreecommitdiffstats
path: root/core/vm/memory_table.go
diff options
context:
space:
mode:
Diffstat (limited to 'core/vm/memory_table.go')
-rw-r--r--core/vm/memory_table.go114
1 files changed, 65 insertions, 49 deletions
diff --git a/core/vm/memory_table.go b/core/vm/memory_table.go
index 8fa6c90ca..4fcb41442 100644
--- a/core/vm/memory_table.go
+++ b/core/vm/memory_table.go
@@ -16,82 +16,98 @@
package vm
-import (
- "math/big"
-
- "github.com/ethereum/go-ethereum/common/math"
-)
-
-func memorySha3(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(0), stack.Back(1))
+func memorySha3(stack *Stack) (uint64, bool) {
+ return calcMemSize64(stack.Back(0), stack.Back(1))
}
-func memoryCallDataCopy(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(0), stack.Back(2))
+func memoryCallDataCopy(stack *Stack) (uint64, bool) {
+ return calcMemSize64(stack.Back(0), stack.Back(2))
}
-func memoryReturnDataCopy(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(0), stack.Back(2))
+func memoryReturnDataCopy(stack *Stack) (uint64, bool) {
+ return calcMemSize64(stack.Back(0), stack.Back(2))
}
-func memoryCodeCopy(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(0), stack.Back(2))
+func memoryCodeCopy(stack *Stack) (uint64, bool) {
+ return calcMemSize64(stack.Back(0), stack.Back(2))
}
-func memoryExtCodeCopy(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(1), stack.Back(3))
+func memoryExtCodeCopy(stack *Stack) (uint64, bool) {
+ return calcMemSize64(stack.Back(1), stack.Back(3))
}
-func memoryMLoad(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(0), big.NewInt(32))
+func memoryMLoad(stack *Stack) (uint64, bool) {
+ return calcMemSize64WithUint(stack.Back(0), 32)
}
-func memoryMStore8(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(0), big.NewInt(1))
+func memoryMStore8(stack *Stack) (uint64, bool) {
+ return calcMemSize64WithUint(stack.Back(0), 1)
}
-func memoryMStore(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(0), big.NewInt(32))
+func memoryMStore(stack *Stack) (uint64, bool) {
+ return calcMemSize64WithUint(stack.Back(0), 32)
}
-func memoryCreate(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(1), stack.Back(2))
+func memoryCreate(stack *Stack) (uint64, bool) {
+ return calcMemSize64(stack.Back(1), stack.Back(2))
}
-func memoryCreate2(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(1), stack.Back(2))
+func memoryCreate2(stack *Stack) (uint64, bool) {
+ return calcMemSize64(stack.Back(1), stack.Back(2))
}
-func memoryCall(stack *Stack) *big.Int {
- x := calcMemSize(stack.Back(5), stack.Back(6))
- y := calcMemSize(stack.Back(3), stack.Back(4))
-
- return math.BigMax(x, y)
+func memoryCall(stack *Stack) (uint64, bool) {
+ x, overflow := calcMemSize64(stack.Back(5), stack.Back(6))
+ if overflow {
+ return 0, true
+ }
+ y, overflow := calcMemSize64(stack.Back(3), stack.Back(4))
+ if overflow {
+ return 0, true
+ }
+ if x > y {
+ return x, false
+ }
+ return y, false
}
-
-func memoryDelegateCall(stack *Stack) *big.Int {
- x := calcMemSize(stack.Back(4), stack.Back(5))
- y := calcMemSize(stack.Back(2), stack.Back(3))
-
- return math.BigMax(x, y)
+func memoryDelegateCall(stack *Stack) (uint64, bool) {
+ x, overflow := calcMemSize64(stack.Back(4), stack.Back(5))
+ if overflow {
+ return 0, true
+ }
+ y, overflow := calcMemSize64(stack.Back(2), stack.Back(3))
+ if overflow {
+ return 0, true
+ }
+ if x > y {
+ return x, false
+ }
+ return y, false
}
-func memoryStaticCall(stack *Stack) *big.Int {
- x := calcMemSize(stack.Back(4), stack.Back(5))
- y := calcMemSize(stack.Back(2), stack.Back(3))
-
- return math.BigMax(x, y)
+func memoryStaticCall(stack *Stack) (uint64, bool) {
+ x, overflow := calcMemSize64(stack.Back(4), stack.Back(5))
+ if overflow {
+ return 0, true
+ }
+ y, overflow := calcMemSize64(stack.Back(2), stack.Back(3))
+ if overflow {
+ return 0, true
+ }
+ if x > y {
+ return x, false
+ }
+ return y, false
}
-func memoryReturn(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(0), stack.Back(1))
+func memoryReturn(stack *Stack) (uint64, bool) {
+ return calcMemSize64(stack.Back(0), stack.Back(1))
}
-func memoryRevert(stack *Stack) *big.Int {
- return calcMemSize(stack.Back(0), stack.Back(1))
+func memoryRevert(stack *Stack) (uint64, bool) {
+ return calcMemSize64(stack.Back(0), stack.Back(1))
}
-func memoryLog(stack *Stack) *big.Int {
- mSize, mStart := stack.Back(1), stack.Back(0)
- return calcMemSize(mStart, mSize)
+func memoryLog(stack *Stack) (uint64, bool) {
+ return calcMemSize64(stack.Back(0), stack.Back(1))
}