首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取另一个宏的返回。

获取另一个宏的返回。
EN

Ethereum用户
提问于 2022-08-04 03:19:55
回答 1查看 25关注 0票数 0

假设我有两个宏:

代码语言:javascript
复制
#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的返回值?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-08-04 05:03:43

在它的当前形式中,您不能。记住,调用宏与复制粘贴代码到当前执行的位置相同,包括结束事务的返回!

要解决这个问题,您可以做的是制作一个包装器宏,一个返回,另一个不返回。

TOTAL_SUPPLY_RETURNS返回,并调用不返回的TOTAL_SUPPLY。因此,您可以在未来的代码中使用TOTAL_SUPPLY

(请记住,如果您经常使用TOTAL_SUPPLY,您可能会考虑将它变成一个函数而不是宏)

代码语言:javascript
复制
#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
}
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/132974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档