From 66b2ae96638782883e4d5543e56249918c9cd393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Thu, 22 Dec 2016 12:55:49 +0100 Subject: [PATCH] EVM-C: return by explicit output param In evm_query_fn, return result by explicit output parameter to avoid C ABI issues and inrease portability. C compiler would do the same implicitly. --- examples/capi.c | 20 +++++++++++--------- include/evm.h | 7 ++++--- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/examples/capi.c b/examples/capi.c index f87e408..98a0e09 100644 --- a/examples/capi.c +++ b/examples/capi.c @@ -16,25 +16,27 @@ struct evm_uint160be address(struct evm_env* env) return ret; } -static union evm_variant query(struct evm_env* env, - enum evm_query_key key, - const union evm_variant* arg) { - union evm_variant result; +static void query(union evm_variant* result, + struct evm_env* env, + enum evm_query_key key, + const union evm_variant* arg) { printf("EVM-C: QUERY %d\n", key); switch (key) { - case EVM_GAS_LIMIT: result.int64 = 314; break; + case EVM_GAS_LIMIT: + result->int64 = 314; + break; case EVM_BALANCE: - result.uint256be = balance(env, arg->address); + result->uint256be = balance(env, arg->address); break; case EVM_ADDRESS: - result.address = address(env); + result->address = address(env); break; - default: result.int64 = 0; break; + default: + result->int64 = 0; } - return result; } static void update(struct evm_env* env, diff --git a/include/evm.h b/include/evm.h index b97096f..8561a9a 100644 --- a/include/evm.h +++ b/include/evm.h @@ -229,9 +229,10 @@ union evm_variant { /// @param arg evm_variant::uint256be The index of the storage entry. /// @result evm_variant::uint256be The current value of the storage entry. /// -typedef union evm_variant (*evm_query_fn)(struct evm_env* env, - enum evm_query_key key, - const union evm_variant* arg); +typedef void (*evm_query_fn)(union evm_variant* result, + struct evm_env* env, + enum evm_query_key key, + const union evm_variant* arg); /// The update callback key. enum evm_update_key {