| // 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) |
| serviceMemberTypeContext = wireAndUnifedMemberContext(fidlgen.ToUpperCamelCase) |
| // 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(https://fxbug.dev/42069447): 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(https://fxbug.dev/42069447): 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.AliasDeclType, 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", |
| "IsEmpty", |
| "New", |
| "Tag", |
| "Unknown", |
| "UnknownBytes", |
| "UnknownData", |
| "Which", |
| "has_invalid_tag", |
| "unknown", |
| "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_COUNTER_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_COUNTER", |
| "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(https://fxbug.dev/42128146): 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_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(https://fxbug.dev/42176538): this list is incomplete, downstream uses of some colliding names need |
| // to be rectified first. |
| macroNames := []string{ |
| "stderr", |
| "stdin", |
| "stdout", |
| } |
| |
| // misc other names |
| // TODO(https://fxbug.dev/42069447): 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, |
| serviceMemberTypeContext, |
| 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(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"}) |
| } |