blob: 13d404b14a1e82a8a24a20d4f09e4a4f7cf76daa [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "tools/kazoo/syscall_library.h"
// See alias_workarounds[.test].fidl for explanation and what these will be in "real" .fidl once the
// frontend supports the necessary syntax.
bool AliasWorkaround(const std::string& name, const SyscallLibrary& library, Type* type) {
if (name == "charptr") {
*type = Type(TypePointer(Type(TypeChar{})), Constness::kMutable);
return true;
}
if (name == "const_futexptr") {
*type = Type(TypePointer(Type(TypeZxBasicAlias("futex"))), Constness::kConst);
return true;
}
if (name == "const_voidptr") {
*type = Type(TypePointer(Type(TypeVoid{})), Constness::kConst);
return true;
}
if (name == "mutable_string") {
*type = Type(TypeString{}, Constness::kMutable);
return true;
}
if (name == "mutable_uint32") {
*type = Type(TypePointer(Type(TypeUint32{})), Constness::kMutable);
return true;
}
if (name == "mutable_usize") {
*type = Type(TypePointer(Type(TypeSizeT{})), Constness::kMutable);
return true;
}
if (name == "mutable_vector_HandleDisposition_u32size") {
*type = Type(TypeVector(Type(library.TypeFromIdentifier("zz/HandleDisposition")),
UseUint32ForVectorSizeTag{}),
Constness::kMutable);
return true;
}
if (name == "mutable_vector_WaitItem") {
*type = Type(TypeVector(Type(library.TypeFromIdentifier("zz/WaitItem"))), Constness::kMutable);
return true;
}
if (name == "mutable_vector_handle_u32size") {
*type = Type(TypeVector(Type(TypeHandle(std::string())), UseUint32ForVectorSizeTag{}),
Constness::kMutable);
return true;
}
if (name == "mutable_vector_void") {
*type = Type(TypeVector(Type(TypeVoid{})), Constness::kMutable);
return true;
}
if (name == "mutable_vector_void_u32size") {
*type = Type(TypeVector(Type(TypeVoid{}), UseUint32ForVectorSizeTag{}), Constness::kMutable);
return true;
}
if (name == "optional_PciBar") {
*type = Type(library.TypeFromIdentifier("zz/PciBar").type_data(), Constness::kUnspecified,
Optionality::kOutputOptional);
return true;
}
if (name == "optional_PortPacket") {
*type = Type(library.TypeFromIdentifier("zz/PortPacket").type_data(), Constness::kUnspecified,
Optionality::kOutputOptional);
return true;
}
if (name == "optional_koid") {
*type = Type(TypeZxBasicAlias("koid"), Constness::kUnspecified, Optionality::kOutputOptional);
return true;
}
if (name == "optional_signals") {
*type =
Type(TypeZxBasicAlias("signals"), Constness::kUnspecified, Optionality::kOutputOptional);
return true;
}
if (name == "optional_time") {
*type = Type(TypeZxBasicAlias("time"), Constness::kUnspecified, Optionality::kOutputOptional);
return true;
}
if (name == "optional_uint32") {
*type = Type(TypeUint32{}, Constness::kUnspecified, Optionality::kOutputOptional);
return true;
}
if (name == "optional_usize") {
*type = Type(TypeSizeT{}, Constness::kUnspecified, Optionality::kOutputOptional);
return true;
}
if (name == "optional_off") {
*type = Type(TypeZxBasicAlias("off"), Constness::kUnspecified, Optionality::kOutputOptional);
return true;
}
if (name == "vector_HandleInfo_u32size") {
*type = Type(
TypeVector(Type(library.TypeFromIdentifier("zz/HandleInfo")), UseUint32ForVectorSizeTag{}),
Constness::kConst);
return true;
}
if (name == "vector_handle_u32size") {
*type = Type(TypeVector(Type(TypeHandle(std::string())), UseUint32ForVectorSizeTag{}),
Constness::kConst);
return true;
}
if (name == "vector_paddr") {
*type = Type(TypeVector(Type(TypeZxBasicAlias("paddr"))), Constness::kConst);
return true;
}
if (name == "vector_void") {
*type = Type(TypeVector(Type(TypeVoid{})), Constness::kConst);
return true;
}
if (name == "vector_iovec") {
*type = Type(TypeVector(Type(TypeZxBasicAlias("iovec"))), Constness::kConst);
return true;
}
if (name == "vector_void_u32size") {
*type = Type(TypeVector(Type(TypeVoid{}), UseUint32ForVectorSizeTag{}), Constness::kConst);
return true;
}
if (name == "voidptr") {
*type = Type(TypePointer(Type(TypeVoid{})), Constness::kMutable);
return true;
}
if (name == "string_view") {
*type = Type(TypeZxBasicAlias("string_view"));
return true;
}
return false;
}