| // Copyright 2021 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. |
| |
| package fidlgen_cpp |
| |
| import ( |
| "fmt" |
| |
| "go.fuchsia.dev/fuchsia/tools/fidl/lib/fidlgen" |
| ) |
| |
| func changeIfReserved(name string, ctx fidlgen.NameContext) string { |
| if ctx.IsReserved(name) { |
| return name + "_" |
| } |
| return name |
| } |
| |
| type nameTransform func(string) string |
| |
| func (fn nameTransform) apply(s string) string { |
| if fn == nil { |
| return s |
| } |
| return fn(s) |
| } |
| |
| type declarationTransform func(fidlgen.CompoundIdentifier, fidlgen.NameContext) name |
| |
| func simpleDeclarationTransform( |
| nsFn func(fidlgen.LibraryIdentifier) namespace, |
| nFn nameTransform) declarationTransform { |
| return func(id fidlgen.CompoundIdentifier, ctx fidlgen.NameContext) name { |
| return nsFn(id.Library).member(changeIfReserved(nFn.apply(string(id.Name)), ctx)) |
| } |
| } |
| |
| type declarationTransforms struct { |
| hlcpp declarationTransform |
| unified declarationTransform |
| wire declarationTransform |
| } |
| type declarationContext struct { |
| fidlgen.NameContext |
| transforms declarationTransforms |
| } |
| |
| func (ctx declarationContext) transform(id fidlgen.CompoundIdentifier) nameVariants { |
| return nameVariants{ |
| HLCPP: ctx.transforms.hlcpp(id, ctx.NameContext), |
| Unified: ctx.transforms.unified(id, ctx.NameContext), |
| Wire: ctx.transforms.wire(id, ctx.NameContext), |
| } |
| } |
| |
| type memberTransform func(fidlgen.Identifier) name |
| type memberTransforms struct { |
| hlcpp nameTransform |
| unified nameTransform |
| wire nameTransform |
| } |
| type memberContext struct { |
| fidlgen.NameContext |
| transforms memberTransforms |
| } |
| |
| // wireAndUnifedMemberContext returns a memberContext that applies a transform |
| // to the wire and unified name, leaving HLCPP alone. |
| func wireAndUnifedMemberContext(transform nameTransform) memberContext { |
| return memberContext{ |
| fidlgen.NewNameContext(), memberTransforms{unified: transform, wire: transform}, |
| } |
| } |
| |
| // helper function used by transform |
| func (ctx memberContext) makeName(n string) name { |
| return simpleName(changeIfReserved(n, ctx.NameContext)) |
| } |
| |
| func (ctx memberContext) transform(id fidlgen.Identifier) nameVariants { |
| n := string(id) |
| return nameVariants{ |
| HLCPP: ctx.makeName(ctx.transforms.hlcpp.apply(n)), |
| Unified: ctx.makeName(ctx.transforms.unified.apply(n)), |
| Wire: ctx.makeName(ctx.transforms.wire.apply(n)), |
| } |
| |
| } |
| |
| // All data members are in lower_snake_case: |
| // https://google.github.io/styleguide/cppguide.html#Variable_Names |
| func newDataMemberContext() memberContext { |
| return memberContext{ |
| fidlgen.NewNameContext(), memberTransforms{ |
| unified: fidlgen.ToSnakeCase, |
| wire: fidlgen.ToSnakeCase, |
| }, |
| } |
| } |
| |
| // All constants members are in kCamelCase: |
| // https://google.github.io/styleguide/cppguide.html#Enumerator_Names |
| func newConstantMemberContext() memberContext { |
| return memberContext{ |
| NameContext: fidlgen.NewNameContext(), |
| transforms: memberTransforms{ |
| unified: fidlgen.ConstNameToKCamelCase, |
| wire: fidlgen.ConstNameToKCamelCase, |
| }, |
| } |
| } |
| |
| var ( |
| // Name of a bits member |
| bitsMemberContext = newConstantMemberContext() |
| // Name of an enum member |
| enumMemberContext = newConstantMemberContext() |
| // Name of a struct member |
| structMemberContext = newDataMemberContext() |
| // Name of a table member |
| tableMemberContext = newDataMemberContext() |
| // Name of a union member |
| unionMemberContext = newDataMemberContext() |
| // Name of a union member tag |
| unionMemberTagContext = memberContext{ |
| NameContext: fidlgen.NewNameContext(), |
| transforms: memberTransforms{ |
| hlcpp: fidlgen.ConstNameToKCamelCase, |
| unified: fidlgen.ConstNameToKCamelCase, |
| wire: fidlgen.ConstNameToKCamelCase, |
| }, |
| } |
| // Name of a method |
| // https://google.github.io/styleguide/cppguide.html#Function_Names |
| methodNameContext = wireAndUnifedMemberContext(fidlgen.ToUpperCamelCase) |
| // Name of a service member |
| // https://google.github.io/styleguide/cppguide.html#Type_Names |
| serviceMemberContext = wireAndUnifedMemberContext(fidlgen.ToSnakeCase) |
| // Name of a constant |
| // https://google.github.io/styleguide/cppguide.html#Constant_Names |
| constantContext = declarationContext{ |
| NameContext: fidlgen.NewNameContext(), |
| transforms: declarationTransforms{ |
| hlcpp: simpleDeclarationTransform(hlcppNamespace, nil), |
| unified: simpleDeclarationTransform(unifiedNamespace, fidlgen.ConstNameToKCamelCase), |
| wire: simpleDeclarationTransform(wireNamespace, fidlgen.ConstNameToKCamelCase), |
| }, |
| } |
| // Name of a data-type declaration |
| // https://google.github.io/styleguide/cppguide.html#Type_Names |
| typeContext = declarationContext{ |
| NameContext: fidlgen.NewNameContext(), |
| transforms: declarationTransforms{ |
| hlcpp: simpleDeclarationTransform(hlcppNamespace, nil), |
| unified: simpleDeclarationTransform(unifiedNamespace, fidlgen.ToUpperCamelCase), |
| wire: simpleDeclarationTransform(wireNamespace, fidlgen.ToUpperCamelCase), |
| }, |
| } |
| // Name of a service declaration |
| // https://google.github.io/styleguide/cppguide.html#Type_Names |
| // TODO(yifeit): Protocols and services should not have DeclName. |
| // Not all bindings generate these types. |
| serviceContext = declarationContext{ |
| NameContext: fidlgen.NewNameContext(), |
| transforms: declarationTransforms{ |
| hlcpp: simpleDeclarationTransform(hlcppNamespace, nil), |
| unified: simpleDeclarationTransform(unifiedNamespace, fidlgen.ToUpperCamelCase), |
| wire: simpleDeclarationTransform(unifiedNamespace, fidlgen.ToUpperCamelCase), |
| }, |
| } |
| // Name of a protocol declaration |
| // https://google.github.io/styleguide/cppguide.html#Type_Names |
| // TODO(yifeit): Protocols and services should not have DeclName. |
| // Not all bindings generate these types. |
| protocolContext = declarationContext{ |
| NameContext: fidlgen.NewNameContext(), |
| transforms: declarationTransforms{ |
| hlcpp: simpleDeclarationTransform(hlcppNamespace, nil), |
| unified: simpleDeclarationTransform(unifiedNamespace, fidlgen.ToUpperCamelCase), |
| wire: simpleDeclarationTransform(unifiedNamespace, fidlgen.ToUpperCamelCase), |
| }, |
| } |
| |
| // Namespace components |
| // https://google.github.io/styleguide/cppguide.html#Namespace_Names |
| nsComponentContext = fidlgen.NewNameContext() |
| ) |
| |
| func declContext(declType fidlgen.DeclType) declarationContext { |
| switch declType { |
| case fidlgen.ConstDeclType: |
| return constantContext |
| case fidlgen.BitsDeclType, fidlgen.EnumDeclType, fidlgen.StructDeclType, |
| fidlgen.TableDeclType, fidlgen.UnionDeclType: |
| return typeContext |
| case fidlgen.ProtocolDeclType: |
| return protocolContext |
| case fidlgen.ServiceDeclType: |
| return serviceContext |
| default: |
| panic(fmt.Sprintf("Unknown decl type: %#v", declType)) |
| } |
| } |
| |
| func memberNameContext(declType fidlgen.DeclType) memberContext { |
| switch declType { |
| case fidlgen.BitsDeclType: |
| return bitsMemberContext |
| case fidlgen.EnumDeclType: |
| return enumMemberContext |
| case fidlgen.StructDeclType: |
| return structMemberContext |
| case fidlgen.TableDeclType: |
| return tableMemberContext |
| case fidlgen.UnionDeclType: |
| return unionMemberContext |
| case fidlgen.ProtocolDeclType: |
| return methodNameContext |
| case fidlgen.ServiceDeclType: |
| return serviceMemberContext |
| default: |
| panic(fmt.Sprintf("Decl type %#v shouldn't have members", declType)) |
| } |
| } |
| |
| func init() { |
| // C++ keywords from: https://en.cppreference.com/w/cpp/keyword |
| cppKeywords := []string{ |
| "alignas", "alignof", "and_eq", "and", "asm", "atomic_cancel", |
| "atomic_commit", "atomic_noexcept", "auto", "bitand", "bitor", |
| "bool", "break", "case", "catch", "char", "char16_t", "char32_t", |
| "class", "co_await", "co_return", "co_yield", "compl", "concept", |
| "const_cast", "const", "consteval", "constexpr", "constinit", |
| "continue", "decltype", "default", "delete", "do", "double", |
| "dynamic_cast", "else", "enum", "explicit", "export", "extern", |
| "false", "float", "for", "friend", "goto", "if", "inline", "int", |
| "long", "module", "mutable", "namespace", "new", "noexcept", |
| "not_eq", "not", "nullptr", "operator", "or_eq", "or", "private", |
| "protected", "public", "reflexexpr", "register", |
| "reinterpret_cast", "requires", "return", "short", "signed", |
| "sizeof", "static_assert", "static_cast", "static", "struct", |
| "switch", "synchronized", "template", "this", "thread_local", |
| "throw", "true", "try", "typedef", "typeid", "typename", "union", |
| "unsigned", "using", "virtual", "void", "volatile", "wchar_t", |
| "while", "xor_eq", "xor"} |
| |
| // All names from errno definitions. |
| errnos := []string{"EPERM", "ENOENT", "ESRCH", "EINTR", "EIO", |
| "ENXIO", "E2BIG", "ENOEXEC", "EBADF", "ECHILD", "EAGAIN", "ENOMEM", |
| "EACCES", "EFAULT", "ENOTBLK", "EBUSY", "EEXIST", "EXDEV", "ENODEV", |
| "ENOTDIR", "EISDIR", "EINVAL", "ENFILE", "EMFILE", "ENOTTY", |
| "ETXTBSY", "EFBIG", "ENOSPC", "ESPIPE", "EROFS", "EMLINK", "EPIPE", |
| "EDOM", "ERANGE", "EDEADLK", "ENAMETOOLONG", "ENOLCK", "ENOSYS", |
| "ENOTEMPTY", "ELOOP", "EWOULDBLOCK", "ENOMSG", "EIDRM", "ECHRNG", |
| "EL2NSYNC", "EL3HLT", "EL3RST", "ELNRNG", "EUNATCH", "ENOCSI", |
| "EL2HLT", "EBADE", "EBADR", "EXFULL", "ENOANO", "EBADRQC", |
| "EBADSLT", "EDEADLOCK", "EBFONT", "ENOSTR", "ENODATA", "ETIME", |
| "ENOSR", "ENONET", "ENOPKG", "EREMOTE", "ENOLINK", "EADV", "ESRMNT", |
| "ECOMM", "EPROTO", "EMULTIHOP", "EDOTDOT", "EBADMSG", "EOVERFLOW", |
| "ENOTUNIQ", "EBADFD", "EREMCHG", "ELIBACC", "ELIBBAD", "ELIBSCN", |
| "ELIBMAX", "ELIBEXEC", "EILSEQ", "ERESTART", "ESTRPIPE", "EUSERS", |
| "ENOTSOCK", "EDESTADDRREQ", "EMSGSIZE", "EPROTOTYPE", "ENOPROTOOPT", |
| "EPROTONOSUPPORT", "ESOCKTNOSUPPORT", "EOPNOTSUPP", "ENOTSUP", |
| "EPFNOSUPPORT", "EAFNOSUPPORT", "EADDRINUSE", "EADDRNOTAVAIL", |
| "ENETDOWN", "ENETUNREACH", "ENETRESET", "ECONNABORTED", |
| "ECONNRESET", "ENOBUFS", "EISCONN", "ENOTCONN", "ESHUTDOWN", |
| "ETOOMANYREFS", "ETIMEDOUT", "ECONNREFUSED", "EHOSTDOWN", |
| "EHOSTUNREACH", "EALREADY", "EINPROGRESS", "ESTALE", "EUCLEAN", |
| "ENOTNAM", "ENAVAIL", "EISNAM", "EREMOTEIO", "EDQUOT", "ENOMEDIUM", |
| "EMEDIUMTYPE", "ECANCELED", "ENOKEY", "EKEYEXPIRED", "EKEYREVOKED", |
| "EKEYREJECTED", "EOWNERDEAD", "ENOTRECOVERABLE", "ERFKILL", |
| "EHWPOISON"} |
| |
| // Names used in the C++ FIDL bindings |
| fidlNames := []string{"FidlType", "HandleEvents", |
| "has_invalid_tag", "IsEmpty", "New", "Tag", "unknown", "Unknown", |
| "UnknownBytes", "UnknownData", "which", "Which"} |
| // TODO: Add "Builder", "ExternalBuilder" |
| |
| // Names used by ZX_ macros |
| zxNames := []string{ |
| "ZX_ASSERT_LEVEL", |
| "ZX_BTI_COMPRESS", |
| "ZX_BTI_CONTIGUOUS", |
| "ZX_BTI_PERM_EXECUTE", |
| "ZX_BTI_PERM_READ", |
| "ZX_BTI_PERM_WRITE", |
| "ZX_CACHE_FLUSH_DATA", |
| "ZX_CACHE_FLUSH_INSN", |
| "ZX_CACHE_FLUSH_INVALIDATE", |
| "ZX_CACHE_POLICY_CACHED", |
| "ZX_CACHE_POLICY_MASK", |
| "ZX_CACHE_POLICY_UNCACHED", |
| "ZX_CACHE_POLICY_UNCACHED_DEVICE", |
| "ZX_CACHE_POLICY_WRITE_COMBINING", |
| "ZX_CHANNEL_MAX_MSG_BYTES", |
| "ZX_CHANNEL_MAX_MSG_HANDLES", |
| "ZX_CHANNEL_MAX_MSG_IOVECS", |
| "ZX_CHANNEL_PEER_CLOSED", |
| "ZX_CHANNEL_READABLE", |
| "ZX_CHANNEL_READ_MAY_DISCARD", |
| "ZX_CHANNEL_WRITABLE", |
| "ZX_CHANNEL_WRITE_USE_IOVEC", |
| "ZX_CLOCK_MONOTONIC", |
| "ZX_CLOCK_STARTED", |
| "ZX_CPRNG_ADD_ENTROPY_MAX_LEN", |
| "ZX_CPRNG_DRAW_MAX_LEN", |
| "ZX_CPU_SET_BITS_PER_WORD", |
| "ZX_CPU_SET_MAX_CPUS", |
| "ZX_DEBUG_ASSERT_IMPLEMENTED", |
| "ZX_DEFAULT_BTI_RIGHTS", |
| "ZX_DEFAULT_CHANNEL_RIGHTS", |
| "ZX_DEFAULT_CLOCK_RIGHTS", |
| "ZX_DEFAULT_EVENTPAIR_RIGHTS", |
| "ZX_DEFAULT_EVENT_RIGHTS", |
| "ZX_DEFAULT_EXCEPTION_RIGHTS", |
| "ZX_DEFAULT_FIFO_RIGHTS", |
| "ZX_DEFAULT_GUEST_RIGHTS", |
| "ZX_DEFAULT_INTERRUPT_RIGHTS", |
| "ZX_DEFAULT_IOMMU_RIGHTS", |
| "ZX_DEFAULT_JOB_RIGHTS", |
| "ZX_DEFAULT_LOG_RIGHTS", |
| "ZX_DEFAULT_MSI_RIGHTS", |
| "ZX_DEFAULT_PAGER_RIGHTS", |
| "ZX_DEFAULT_PCI_DEVICE_RIGHTS", |
| "ZX_DEFAULT_PCI_INTERRUPT_RIGHTS", |
| "ZX_DEFAULT_PMT_RIGHTS", |
| "ZX_DEFAULT_PORT_RIGHTS", |
| "ZX_DEFAULT_PROCESS_RIGHTS", |
| "ZX_DEFAULT_PROFILE_RIGHTS", |
| "ZX_DEFAULT_RESOURCE_RIGHTS", |
| "ZX_DEFAULT_SOCKET_RIGHTS", |
| "ZX_DEFAULT_STREAM_RIGHTS", |
| "ZX_DEFAULT_SUSPEND_TOKEN_RIGHTS", |
| "ZX_DEFAULT_SYSTEM_EVENT_LOW_MEMORY_RIGHTS", |
| "ZX_DEFAULT_THREAD_RIGHTS", |
| "ZX_DEFAULT_TIMER_RIGHTS", |
| "ZX_DEFAULT_VCPU_RIGHTS", |
| "ZX_DEFAULT_VMAR_RIGHTS", |
| "ZX_DEFAULT_VMO_RIGHTS", |
| "ZX_ERR_ACCESS_DENIED", |
| "ZX_ERR_ADDRESS_IN_USE", |
| "ZX_ERR_ADDRESS_UNREACHABLE", |
| "ZX_ERR_ALREADY_BOUND", |
| "ZX_ERR_ALREADY_EXISTS", |
| "ZX_ERR_ASYNC", |
| "ZX_ERR_BAD_HANDLE", |
| "ZX_ERR_BAD_PATH", |
| "ZX_ERR_BAD_STATE", |
| "ZX_ERR_BAD_SYSCALL", |
| "ZX_ERR_BUFFER_TOO_SMALL", |
| "ZX_ERR_CANCELED", |
| "ZX_ERR_CONNECTION_ABORTED", |
| "ZX_ERR_CONNECTION_REFUSED", |
| "ZX_ERR_CONNECTION_RESET", |
| "ZX_ERR_FILE_BIG", |
| "ZX_ERR_INTERNAL", |
| "ZX_ERR_INTERNAL_INTR_KILLED", |
| "ZX_ERR_INTERNAL_INTR_RETRY", |
| "ZX_ERR_INVALID_ARGS", |
| "ZX_ERR_IO", |
| "ZX_ERR_IO_DATA_INTEGRITY", |
| "ZX_ERR_IO_DATA_LOSS", |
| "ZX_ERR_IO_INVALID", |
| "ZX_ERR_IO_MISSED_DEADLINE", |
| "ZX_ERR_IO_NOT_PRESENT", |
| "ZX_ERR_IO_OVERRUN", |
| "ZX_ERR_IO_REFUSED", |
| "ZX_ERR_NEXT", |
| "ZX_ERR_NO_MEMORY", |
| "ZX_ERR_NO_RESOURCES", |
| "ZX_ERR_NO_SPACE", |
| "ZX_ERR_NOT_CONNECTED", |
| "ZX_ERR_NOT_DIR", |
| "ZX_ERR_NOT_EMPTY", |
| "ZX_ERR_NOT_FILE", |
| "ZX_ERR_NOT_FOUND", |
| "ZX_ERR_NOT_SUPPORTED", |
| "ZX_ERR_OUT_OF_RANGE", |
| "ZX_ERR_PEER_CLOSED", |
| "ZX_ERR_PROTOCOL_NOT_SUPPORTED", |
| "ZX_ERR_SHOULD_WAIT", |
| "ZX_ERR_STOP", |
| "ZX_ERR_TIMED_OUT", |
| "ZX_ERR_UNAVAILABLE", |
| "ZX_ERR_WRONG_TYPE", |
| "ZX_EVENTPAIR_PEER_CLOSED", |
| "ZX_EVENTPAIR_SIGNALED", |
| "ZX_EVENTPAIR_SIGNAL_MASK", |
| "ZX_EVENT_SIGNALED", |
| "ZX_EVENT_SIGNAL_MASK", |
| "ZX_EXCEPTION_STATE_HANDLED", |
| "ZX_EXCEPTION_STATE_THREAD_EXIT", |
| "ZX_EXCEPTION_STATE_TRY_NEXT", |
| "ZX_EXCEPTION_STRATEGY_FIRST_CHANCE", |
| "ZX_EXCEPTION_STRATEGY_SECOND_CHANCE", |
| "ZX_FIFO_MAX_SIZE_BYTES", |
| "ZX_FIFO_PEER_CLOSED", |
| "ZX_FIFO_READABLE", |
| "ZX_FIFO_WRITABLE", |
| "ZX_HANDLE_FIXED_BITS_MASK", |
| "ZX_HANDLE_INVALID", |
| "ZX_HANDLE_OP_DUPLICATE", |
| "ZX_HANDLE_OP_MOVE", |
| "ZX_INFO_BTI", |
| "ZX_INFO_CPU_STATS", |
| "ZX_INFO_CPU_STATS_FLAG_ONLINE", |
| "ZX_INFO_GUEST_STATS", |
| "ZX_INFO_HANDLE_BASIC", |
| "ZX_INFO_HANDLE_COUNT", |
| "ZX_INFO_HANDLE_TABLE", |
| "ZX_INFO_HANDLE_VALID", |
| "ZX_INFO_INVALID_CPU", |
| "ZX_INFO_JOB", |
| "ZX_INFO_JOB_CHILDREN", |
| "ZX_INFO_JOB_PROCESSES", |
| "ZX_INFO_KMEM_STATS", |
| "ZX_INFO_KMEM_STATS_EXTENDED", |
| "ZX_INFO_MAPS_TYPE_ASPACE", |
| "ZX_INFO_MAPS_TYPE_MAPPING", |
| "ZX_INFO_MAPS_TYPE_NONE", |
| "ZX_INFO_MAPS_TYPE_VMAR", |
| "ZX_INFO_MSI", |
| "ZX_INFO_NONE", |
| "ZX_INFO_PROCESS", |
| "ZX_INFO_PROCESS_FLAG_DEBUGGER_ATTACHED", |
| "ZX_INFO_PROCESS_FLAG_EXITED", |
| "ZX_INFO_PROCESS_FLAG_STARTED", |
| "ZX_INFO_PROCESS_HANDLE_STATS", |
| "ZX_INFO_PROCESS_MAPS", |
| "ZX_INFO_PROCESS_THREADS", |
| "ZX_INFO_PROCESS_VMOS", |
| "ZX_INFO_PROCESS_VMOS_V1", |
| "ZX_INFO_RESOURCE", |
| "ZX_INFO_SOCKET", |
| "ZX_INFO_STREAM", |
| "ZX_INFO_TASK_RUNTIME", |
| "ZX_INFO_TASK_RUNTIME_V1", |
| "ZX_INFO_TASK_STATS", |
| "ZX_INFO_THREAD", |
| "ZX_INFO_THREAD_EXCEPTION_REPORT", |
| "ZX_INFO_THREAD_EXCEPTION_REPORT_V1", |
| "ZX_INFO_THREAD_STATS", |
| "ZX_INFO_TIMER", |
| "ZX_INFO_VCPU", |
| "ZX_INFO_VCPU_FLAG_KICKED", |
| "ZX_INFO_VMAR", |
| "ZX_INFO_VMO", |
| "ZX_INFO_VMO_CONTIGUOUS", |
| "ZX_INFO_VMO_DISCARDABLE", |
| "ZX_INFO_VMO_IMMUTABLE", |
| "ZX_INFO_VMO_IS_COW_CLONE", |
| "ZX_INFO_VMO_PAGER_BACKED", |
| "ZX_INFO_VMO_RESIZABLE", |
| "ZX_INFO_VMO_TYPE_PAGED", |
| "ZX_INFO_VMO_TYPE_PHYSICAL", |
| "ZX_INFO_VMO_V1", |
| "ZX_INFO_VMO_VIA_HANDLE", |
| "ZX_INFO_VMO_VIA_MAPPING", |
| "ZX_INTERRUPT_BIND", |
| "ZX_INTERRUPT_MAX_SLOTS", |
| "ZX_INTERRUPT_MODE_DEFAULT", |
| "ZX_INTERRUPT_MODE_EDGE_BOTH", |
| "ZX_INTERRUPT_MODE_EDGE_HIGH", |
| "ZX_INTERRUPT_MODE_EDGE_LOW", |
| "ZX_INTERRUPT_MODE_LEVEL_HIGH", |
| "ZX_INTERRUPT_MODE_LEVEL_LOW", |
| "ZX_INTERRUPT_MODE_MASK", |
| "ZX_INTERRUPT_REMAP_IRQ", |
| "ZX_INTERRUPT_SLOT_USER", |
| "ZX_INTERRUPT_UNBIND", |
| "ZX_INTERRUPT_VIRTUAL", |
| "ZX_JOB_CRITICAL_PROCESS_RETCODE_NONZERO", |
| "ZX_JOB_NO_JOBS", |
| "ZX_JOB_NO_PROCESSES", |
| "ZX_JOB_TERMINATED", |
| "ZX_KOID_FIRST", |
| "ZX_KOID_INVALID", |
| "ZX_KOID_KERNEL", |
| "ZX_LOG_READABLE", |
| "ZX_LOG_WRITABLE", |
| "ZX_MAX_NAME_LEN", |
| "ZX_MAX_PAGE_SHIFT", |
| "ZX_MAX_PAGE_SIZE", |
| "ZX_MIN_PAGE_SHIFT", |
| "ZX_MIN_PAGE_SIZE", |
| "ZX_MSI_MODE_MSI_X", |
| "ZX_OBJ_TYPE_BTI", |
| "ZX_OBJ_TYPE_CHANNEL", |
| "ZX_OBJ_TYPE_CLOCK", |
| "ZX_OBJ_TYPE_EVENT", |
| "ZX_OBJ_TYPE_EVENTPAIR", |
| "ZX_OBJ_TYPE_EXCEPTION", |
| "ZX_OBJ_TYPE_FIFO", |
| "ZX_OBJ_TYPE_GUEST", |
| "ZX_OBJ_TYPE_INTERRUPT", |
| "ZX_OBJ_TYPE_IOMMU", |
| "ZX_OBJ_TYPE_JOB", |
| "ZX_OBJ_TYPE_LOG", |
| "ZX_OBJ_TYPE_MSI_ALLOCATION", |
| "ZX_OBJ_TYPE_MSI_INTERRUPT", |
| "ZX_OBJ_TYPE_NONE", |
| "ZX_OBJ_TYPE_PAGER", |
| "ZX_OBJ_TYPE_PCI_DEVICE", |
| "ZX_OBJ_TYPE_PMT", |
| "ZX_OBJ_TYPE_PORT", |
| "ZX_OBJ_TYPE_PROCESS", |
| "ZX_OBJ_TYPE_PROFILE", |
| "ZX_OBJ_TYPE_RESOURCE", |
| "ZX_OBJ_TYPE_SOCKET", |
| "ZX_OBJ_TYPE_STREAM", |
| "ZX_OBJ_TYPE_SUSPEND_TOKEN", |
| "ZX_OBJ_TYPE_THREAD", |
| "ZX_OBJ_TYPE_TIMER", |
| "ZX_OBJ_TYPE_UPPER_BOUND", |
| "ZX_OBJ_TYPE_VCPU", |
| "ZX_OBJ_TYPE_VMAR", |
| "ZX_OBJ_TYPE_VMO", |
| "ZX_OK", |
| "ZX_PAGE_MASK", |
| "ZX_PAGER_OP_FAIL", |
| "ZX_PAGER_VMO_COMPLETE", |
| "ZX_PAGER_VMO_READ", |
| "ZX_PAGE_SHIFT", |
| "ZX_PAGE_SIZE", |
| "ZX_PCI_BAR_REGS_PER_BRIDGE", |
| "ZX_PCI_BAR_REGS_PER_DEVICE", |
| "ZX_PCI_BAR_TYPE_MMIO", |
| "ZX_PCI_BAR_TYPE_PIO", |
| "ZX_PCI_BAR_TYPE_UNUSED", |
| "ZX_PCI_BASE_CONFIG_SIZE", |
| "ZX_PCI_ECAM_BYTE_PER_BUS", |
| "ZX_PCIE_IRQ_MODE_DISABLED", |
| "ZX_PCIE_IRQ_MODE_LEGACY", |
| "ZX_PCIE_IRQ_MODE_LEGACY_NOACK", |
| "ZX_PCIE_IRQ_MODE_MSI", |
| "ZX_PCIE_IRQ_MODE_MSI_X", |
| "ZX_PCI_EXTENDED_CONFIG_SIZE", |
| "ZX_PCI_INIT_ARG_MAX_ECAM_WINDOWS", |
| "ZX_PCI_INIT_ARG_MAX_SIZE", |
| "ZX_PCI_INTERRUPT_SLOT", |
| "ZX_PCI_MAX_BAR_REGS", |
| "ZX_PCI_MAX_BUSSES", |
| "ZX_PCI_MAX_DEVICES_PER_BUS", |
| "ZX_PCI_MAX_FUNCTIONS_PER_BUS", |
| "ZX_PCI_MAX_FUNCTIONS_PER_DEVICE", |
| "ZX_PCI_MAX_IRQS", |
| "ZX_PCI_MAX_LEGACY_IRQ_PINS", |
| "ZX_PCI_MAX_MSI_IRQS", |
| "ZX_PCI_MAX_MSIX_IRQS", |
| "ZX_PCI_NO_IRQ_MAPPING", |
| "ZX_PCI_STANDARD_CONFIG_HDR_SIZE", |
| "ZX_PKT_GUEST_VCPU_INTERRUPT", |
| "ZX_PKT_GUEST_VCPU_STARTUP", |
| "ZX_PKT_TYPE_GUEST_BELL", |
| "ZX_PKT_TYPE_GUEST_IO", |
| "ZX_PKT_TYPE_GUEST_MEM", |
| "ZX_PKT_TYPE_GUEST_VCPU", |
| "ZX_PKT_TYPE_INTERRUPT", |
| "ZX_PKT_TYPE_PAGE_REQUEST", |
| "ZX_PKT_TYPE_SIGNAL_ONE", |
| "ZX_PKT_TYPE_USER", |
| "ZX_PORT_BIND_TO_INTERRUPT", |
| // TODO(fxbug.dev/51002): These names occur both in zircon/vdso/profile.fidl |
| // and zircon/system/public/zircon/syscalls/profile.h. If/when the latter |
| // becomes generated from the former, we should remove these from the list |
| // so they don't get escaped. |
| "ZX_PRIORITY_DEFAULT", |
| "ZX_PRIORITY_HIGH", |
| "ZX_PRIORITY_HIGHEST", |
| "ZX_PRIORITY_LOW", |
| "ZX_PRIORITY_LOWEST", |
| "ZX_PROCESS_DEBUG_ADDR_BREAK_ON_SET", |
| "ZX_PROCESS_TERMINATED", |
| "ZX_PROFILE_INFO_FLAG_CPU_MASK", |
| "ZX_PROFILE_INFO_FLAG_DEADLINE", |
| "ZX_PROFILE_INFO_FLAG_PRIORITY", |
| "ZX_PROP_EXCEPTION_STATE", |
| "ZX_PROP_EXCEPTION_STRATEGY", |
| "ZX_PROP_JOB_KILL_ON_OOM", |
| "ZX_PROP_NAME", |
| "ZX_PROP_PROCESS_BREAK_ON_LOAD", |
| "ZX_PROP_PROCESS_DEBUG_ADDR", |
| "ZX_PROP_PROCESS_HW_TRACE_CONTEXT_ID", |
| "ZX_PROP_PROCESS_VDSO_BASE_ADDRESS", |
| "ZX_PROP_REGISTER_FS", |
| "ZX_PROP_REGISTER_GS", |
| "ZX_PROP_SOCKET_RX_THRESHOLD", |
| "ZX_PROP_SOCKET_TX_THRESHOLD", |
| "ZX_PROP_VMO_CONTENT_SIZE", |
| "ZX_RIGHT_APPLY_PROFILE", |
| "ZX_RIGHT_DESTROY", |
| "ZX_RIGHT_DUPLICATE", |
| "ZX_RIGHT_ENUMERATE", |
| "ZX_RIGHT_EXECUTE", |
| "ZX_RIGHT_GET_POLICY", |
| "ZX_RIGHT_GET_PROPERTY", |
| "ZX_RIGHT_INSPECT", |
| "ZX_RIGHT_MANAGE_JOB", |
| "ZX_RIGHT_MANAGE_PROCESS", |
| "ZX_RIGHT_MANAGE_SOCKET", |
| "ZX_RIGHT_MANAGE_THREAD", |
| "ZX_RIGHT_MAP", |
| "ZX_RIGHT_NONE", |
| "ZX_RIGHT_READ", |
| "ZX_RIGHT_SAME_RIGHTS", |
| "ZX_RIGHTS_BASIC", |
| "ZX_RIGHT_SET_POLICY", |
| "ZX_RIGHT_SET_PROPERTY", |
| "ZX_RIGHT_SIGNAL", |
| "ZX_RIGHT_SIGNAL_PEER", |
| "ZX_RIGHTS_IO", |
| "ZX_RIGHTS_POLICY", |
| "ZX_RIGHTS_PROPERTY", |
| "ZX_RIGHT_TRANSFER", |
| "ZX_RIGHT_WAIT", |
| "ZX_RIGHT_WRITE", |
| "ZX_SIGNAL_HANDLE_CLOSED", |
| "ZX_SIGNAL_NONE", |
| "ZX_SOCKET_CREATE_MASK", |
| "ZX_SOCKET_DATAGRAM", |
| "ZX_SOCKET_DISPOSITION_WRITE_DISABLED", |
| "ZX_SOCKET_DISPOSITION_WRITE_ENABLED", |
| "ZX_SOCKET_PEEK", |
| "ZX_SOCKET_PEER_CLOSED", |
| "ZX_SOCKET_PEER_WRITE_DISABLED", |
| "ZX_SOCKET_READABLE", |
| "ZX_SOCKET_READ_THRESHOLD", |
| "ZX_SOCKET_STREAM", |
| "ZX_SOCKET_WRITABLE", |
| "ZX_SOCKET_WRITE_DISABLED", |
| "ZX_SOCKET_WRITE_THRESHOLD", |
| "ZX_STREAM_APPEND", |
| "ZX_STREAM_CREATE_MASK", |
| "ZX_STREAM_MODE_READ", |
| "ZX_STREAM_MODE_WRITE", |
| "ZX_STREAM_SEEK_ORIGIN_CURRENT", |
| "ZX_STREAM_SEEK_ORIGIN_END", |
| "ZX_STREAM_SEEK_ORIGIN_START", |
| "ZX_SYSTEM_EVENT_IMMINENT_OUT_OF_MEMORY", |
| "ZX_SYSTEM_EVENT_MEMORY_PRESSURE_CRITICAL", |
| "ZX_SYSTEM_EVENT_MEMORY_PRESSURE_NORMAL", |
| "ZX_SYSTEM_EVENT_MEMORY_PRESSURE_WARNING", |
| "ZX_SYSTEM_EVENT_OUT_OF_MEMORY", |
| "ZX_TASK_RETCODE_CRITICAL_PROCESS_KILL", |
| "ZX_TASK_RETCODE_EXCEPTION_KILL", |
| "ZX_TASK_RETCODE_OOM_KILL", |
| "ZX_TASK_RETCODE_POLICY_KILL", |
| "ZX_TASK_RETCODE_SYSCALL_KILL", |
| "ZX_TASK_RETCODE_VDSO_KILL", |
| "ZX_TASK_TERMINATED", |
| "ZX_THREAD_RUNNING", |
| "ZX_THREAD_STATE_BLOCKED", |
| "ZX_THREAD_STATE_BLOCKED_CHANNEL", |
| "ZX_THREAD_STATE_BLOCKED_EXCEPTION", |
| "ZX_THREAD_STATE_BLOCKED_FUTEX", |
| "ZX_THREAD_STATE_BLOCKED_INTERRUPT", |
| "ZX_THREAD_STATE_BLOCKED_PAGER", |
| "ZX_THREAD_STATE_BLOCKED_PORT", |
| "ZX_THREAD_STATE_BLOCKED_SLEEPING", |
| "ZX_THREAD_STATE_BLOCKED_WAIT_MANY", |
| "ZX_THREAD_STATE_BLOCKED_WAIT_ONE", |
| "ZX_THREAD_STATE_DEAD", |
| "ZX_THREAD_STATE_DYING", |
| "ZX_THREAD_STATE_NEW", |
| "ZX_THREAD_STATE_RUNNING", |
| "ZX_THREAD_STATE_SUSPENDED", |
| "ZX_THREAD_SUSPENDED", |
| "ZX_THREAD_TERMINATED", |
| "ZX_TIME_INFINITE", |
| "ZX_TIME_INFINITE_PAST", |
| "ZX_TIMER_SIGNALED", |
| "ZX_TIMER_SLACK_CENTER", |
| "ZX_TIMER_SLACK_EARLY", |
| "ZX_TIMER_SLACK_LATE", |
| "ZX_USER_SIGNAL_0", |
| "ZX_USER_SIGNAL_1", |
| "ZX_USER_SIGNAL_2", |
| "ZX_USER_SIGNAL_3", |
| "ZX_USER_SIGNAL_4", |
| "ZX_USER_SIGNAL_5", |
| "ZX_USER_SIGNAL_6", |
| "ZX_USER_SIGNAL_7", |
| "ZX_USER_SIGNAL_ALL", |
| "ZX_VM_ALIGN_128KB", |
| "ZX_VM_ALIGN_128MB", |
| "ZX_VM_ALIGN_16KB", |
| "ZX_VM_ALIGN_16MB", |
| "ZX_VM_ALIGN_1GB", |
| "ZX_VM_ALIGN_1KB", |
| "ZX_VM_ALIGN_1MB", |
| "ZX_VM_ALIGN_256KB", |
| "ZX_VM_ALIGN_256MB", |
| "ZX_VM_ALIGN_2GB", |
| "ZX_VM_ALIGN_2KB", |
| "ZX_VM_ALIGN_2MB", |
| "ZX_VM_ALIGN_32KB", |
| "ZX_VM_ALIGN_32MB", |
| "ZX_VM_ALIGN_4GB", |
| "ZX_VM_ALIGN_4KB", |
| "ZX_VM_ALIGN_4MB", |
| "ZX_VM_ALIGN_512KB", |
| "ZX_VM_ALIGN_512MB", |
| "ZX_VM_ALIGN_64KB", |
| "ZX_VM_ALIGN_64MB", |
| "ZX_VM_ALIGN_8KB", |
| "ZX_VM_ALIGN_8MB", |
| "ZX_VM_ALIGN_BASE", |
| "ZX_VM_ALLOW_FAULTS", |
| "ZX_VMAR_OP_ALWAYS_NEED", |
| "ZX_VMAR_OP_COMMIT", |
| "ZX_VMAR_OP_DECOMMIT", |
| "ZX_VMAR_OP_DONT_NEED", |
| "ZX_VMAR_OP_MAP_RANGE", |
| "ZX_VM_CAN_MAP_EXECUTE", |
| "ZX_VM_CAN_MAP_READ", |
| "ZX_VM_CAN_MAP_SPECIFIC", |
| "ZX_VM_CAN_MAP_WRITE", |
| "ZX_VM_COMPACT", |
| "ZX_VM_FLAG_CAN_MAP_EXECUTE", |
| "ZX_VM_FLAG_CAN_MAP_READ", |
| "ZX_VM_FLAG_CAN_MAP_SPECIFIC", |
| "ZX_VM_FLAG_CAN_MAP_WRITE", |
| "ZX_VM_FLAG_COMPACT", |
| "ZX_VM_FLAG_MAP_RANGE", |
| "ZX_VM_FLAG_PERM_EXECUTE", |
| "ZX_VM_FLAG_PERM_READ", |
| "ZX_VM_FLAG_PERM_WRITE", |
| "ZX_VM_FLAG_REQUIRE_NON_RESIZABLE", |
| "ZX_VM_FLAG_SPECIFIC", |
| "ZX_VM_FLAG_SPECIFIC_OVERWRITE", |
| "ZX_VM_MAP_RANGE", |
| "ZX_VMO_CHILD_NO_WRITE", |
| "ZX_VMO_CHILD_RESIZABLE", |
| "ZX_VMO_CHILD_SLICE", |
| "ZX_VMO_CHILD_SNAPSHOT", |
| "ZX_VMO_CHILD_SNAPSHOT_AT_LEAST_ON_WRITE", |
| "ZX_VMO_DISCARDABLE", |
| "ZX_VM_OFFSET_IS_UPPER_LIMIT", |
| "ZX_VMO_OP_ALWAYS_NEED", |
| "ZX_VMO_OP_CACHE_CLEAN", |
| "ZX_VMO_OP_CACHE_CLEAN_INVALIDATE", |
| "ZX_VMO_OP_CACHE_INVALIDATE", |
| "ZX_VMO_OP_CACHE_SYNC", |
| "ZX_VMO_OP_COMMIT", |
| "ZX_VMO_OP_DECOMMIT", |
| "ZX_VMO_OP_DONT_NEED", |
| "ZX_VMO_OP_LOCK", |
| "ZX_VMO_OP_TRY_LOCK", |
| "ZX_VMO_OP_UNLOCK", |
| "ZX_VMO_OP_ZERO", |
| "ZX_VMO_RESIZABLE", |
| "ZX_VMO_ZERO_CHILDREN", |
| "ZX_VM_PERM_EXECUTE", |
| "ZX_VM_PERM_READ", |
| "ZX_VM_PERM_WRITE", |
| "ZX_VM_REQUIRE_NON_RESIZABLE", |
| "ZX_VM_SPECIFIC", |
| "ZX_VM_SPECIFIC_OVERWRITE", |
| "ZX_WAIT_ASYNC_EDGE", |
| "ZX_WAIT_ASYNC_ONCE", |
| "ZX_WAIT_ASYNC_TIMESTAMP", |
| "ZX_WAIT_MANY_MAX_ITEMS", |
| } |
| |
| // Non-ZX_ macro definitions defined in files that generated bindings outputs may import. |
| // TODO(fxbug.dev/94622): this list is incomplete, downstream uses of some colliding names need |
| // to be rectified first. |
| macroNames := []string{ |
| "stderr", |
| "stdin", |
| "stdout", |
| } |
| |
| // misc other names |
| // TODO(ianloic): confirm which of these can be removed |
| miscNames := []string{"assert", "import", "NULL", "offsetof", |
| "xunion"} |
| |
| // Reserve names that are universally reserved: |
| for _, ctx := range []declarationContext{constantContext, typeContext, |
| serviceContext, protocolContext} { |
| ctx.ReserveNames(cppKeywords) |
| ctx.ReserveNames(errnos) |
| ctx.ReserveNames(fidlNames) |
| ctx.ReserveNames(miscNames) |
| ctx.ReserveNames(zxNames) |
| ctx.ReserveNames(macroNames) |
| } |
| for _, ctx := range []memberContext{ |
| bitsMemberContext, enumMemberContext, structMemberContext, |
| tableMemberContext, unionMemberContext, serviceMemberContext, |
| methodNameContext} { |
| ctx.ReserveNames(cppKeywords) |
| ctx.ReserveNames(errnos) |
| ctx.ReserveNames(fidlNames) |
| ctx.ReserveNames(miscNames) |
| ctx.ReserveNames(zxNames) |
| ctx.ReserveNames(macroNames) |
| } |
| nsComponentContext.ReserveNames(cppKeywords) |
| nsComponentContext.ReserveNames(errnos) |
| nsComponentContext.ReserveNames(fidlNames) |
| nsComponentContext.ReserveNames(miscNames) |
| nsComponentContext.ReserveNames(zxNames) |
| nsComponentContext.ReserveNames(macroNames) |
| |
| // A Clone() method on a type named Clone would conflict with its constructor. |
| typeContext.ReserveNames([]string{"Clone"}) |
| |
| structMemberContext.ReserveNames([]string{"Clone"}) |
| enumMemberContext.ReserveNames([]string{"Clone"}) |
| bitsMemberContext.ReserveNames([]string{"kMask"}) |
| } |