コード例 #1
0
static bool
RenderSignature(WasmRenderContext& c, const AstSig& sig, const AstNameVector* maybeLocals = nullptr)
{
    uint32_t paramsNum = sig.args().length();

    if (maybeLocals) {
      for (uint32_t i = 0; i < paramsNum; i++) {
          if (!c.buffer.append(" (param "))
              return false;
          const AstName& name = (*maybeLocals)[i];
          if (!name.empty()) {
              if (!RenderName(c, name))
                  return false;
              if (!c.buffer.append(" "))
                  return false;
          }
          ValType arg = sig.args()[i];
          if (!RenderValType(c, arg))
              return false;
          if (!c.buffer.append(")"))
              return false;
      }
    } else if (paramsNum > 0) {
      if (!c.buffer.append(" (param"))
          return false;
      for (uint32_t i = 0; i < paramsNum; i++) {
          if (!c.buffer.append(" "))
              return false;
          ValType arg = sig.args()[i];
          if (!RenderValType(c, arg))
              return false;
      }
      if (!c.buffer.append(")"))
          return false;
    }
    if (sig.ret() != ExprType::Void) {
        if (!c.buffer.append(" (result "))
            return false;
        if (!RenderExprType(c, sig.ret()))
            return false;
        if (!c.buffer.append(")"))
            return false;
    }
    return true;
}
コード例 #2
0
ファイル: WasmBinaryToAST.cpp プロジェクト: emilio/gecko-dev
static bool
AstDecodeCallArgs(AstDecodeContext& c, uint32_t arity, const AstSig& sig, AstExprVector* funcArgs)
{
    if (arity != sig.args().length())
        return c.iter().fail("call arity out of range");

    const AstValTypeVector& args = sig.args();
    uint32_t numArgs = args.length();

    if (!funcArgs->resize(numArgs))
        return false;

    for (size_t i = 0; i < numArgs; ++i) {
        ValType argType = args[i];
        AstDecodeStackItem item;
        if (!c.iter().readCallArg(argType, numArgs, i, &item))
            return false;
        (*funcArgs)[i] = item.expr;
    }

    return c.iter().readCallArgsEnd(numArgs);
}
コード例 #3
0
ファイル: WasmBinaryToAST.cpp プロジェクト: emilio/gecko-dev
static bool
AstDecodeCallReturn(AstDecodeContext& c, const AstSig& sig)
{
    return c.iter().readCallReturn(sig.ret());
}