假设我有两个宏:
#define macro TOTAL_SUPPLY() = takes (0) returns (0) {
[TOTAL_SUPPLY_LOCATION] sload // [supply]
0x00 mstore // []
0x20 0x00 return // []
}
#define macro DOUBLE_TOTAL_SUPPLY() = takes (0) returns (0) {
// Get return of TOTAL_SUPPLY. // [TOTAL_SUPPLY]
0x2 // [0x2, TOTAL_SUPPLY]
mul // [0x2 * TOTAL_SUPPLY]
0x00 mstore
0x20 0x00 return
}如何获得DOUBLE_TOTAL_SUPPLY宏以获得TOTAL_SUPPLY的返回值?
发布于 2022-08-04 05:03:43
在它的当前形式中,您不能。记住,调用宏与复制粘贴代码到当前执行的位置相同,包括结束事务的返回!
要解决这个问题,您可以做的是制作一个包装器宏,一个返回,另一个不返回。
TOTAL_SUPPLY_RETURNS返回,并调用不返回的TOTAL_SUPPLY。因此,您可以在未来的代码中使用TOTAL_SUPPLY。
(请记住,如果您经常使用TOTAL_SUPPLY,您可能会考虑将它变成一个函数而不是宏)
#define macro TOTAL_SUPPLY_RETURNS() = takes (0) returns (0) {
TOTAL_SUPPLY() // [supply]
0x00 mstore // []
0x20 0x00 return // []
}
#define macro TOTAL_SUPPLY() = takes (0) returns (1) {
[TOTAL_SUPPLY_LOCATION] sload // [supply]
}
#define macro DOUBLE_TOTAL_SUPPLY() = takes (0) returns (0) {
TOTAL_SUPPLY() // [TOTAL_SUPPLY]
0x2 // [0x2, TOTAL_SUPPLY]
mul // [0x2 * TOTAL_SUPPLY]
0x00 mstore
0x20 0x00 return
}https://ethereum.stackexchange.com/questions/132974
复制相似问题