github.com/devfans/go-ethereum@v1.5.10-0.20170326212234-7419d0c38291/core/vm/stack_table.go (about)

     1  package vm
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/ethereum/go-ethereum/params"
     7  )
     8  
     9  func makeStackFunc(pop, push int) stackValidationFunc {
    10  	return func(stack *Stack) error {
    11  		if err := stack.require(pop); err != nil {
    12  			return err
    13  		}
    14  
    15  		if stack.len()+push-pop > int(params.StackLimit) {
    16  			return fmt.Errorf("stack limit reached %d (%d)", stack.len(), params.StackLimit)
    17  		}
    18  		return nil
    19  	}
    20  }
    21  
    22  func makeDupStackFunc(n int) stackValidationFunc {
    23  	return makeStackFunc(n, n+1)
    24  }
    25  
    26  func makeSwapStackFunc(n int) stackValidationFunc {
    27  	return makeStackFunc(n, n)
    28  }