code: func getTypeSize(t Type) int {
  	if t.T == ArrayTy && !isDynamicType(*t.Elem) {
  		// Recursively calculate type size if it is a nested array
  		if t.Elem.T == ArrayTy {
  			return t.Size * getTypeSize(*t.Elem)
  		}
  		return t.Size * 32
  	} else if t.T == TupleTy && !isDynamicType(t) {
  		total := 0
  		for _, elem := range t.TupleElems {
  			total += getTypeSize(*elem)
  		}
  		return total
  	}
  	return 32
  }
docs: // getTypeSize returns the size that this type needs to occupy.
  // We distinguish static and dynamic types. Static types are encoded in-place
  // and dynamic types are encoded at a separately allocated location after the
  // current block.
  // So for a static variable, the size returned represents the size that the
  // variable actually occupies.
  // For a dynamic variable, the returned size is fixed 32 bytes, which is used
  // to store the location reference for actual value storage.