tools/net/sunrpc/xdrgen/xdr_ast.py
Source file repositories/reference/linux-study-clean/tools/net/sunrpc/xdrgen/xdr_ast.py
File Facts
- System
- Linux kernel
- Corpus path
tools/net/sunrpc/xdrgen/xdr_ast.py- Extension
.py- Size
- 21915 bytes
- Lines
- 789
- Domain
- Support Tooling And Documentation
- Bucket
- tools
- Inferred role
- Support Tooling And Documentation: tools
- Status
- atlas-only
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
- No top-level syscall, struct, function, initcall, or export declaration detected by the generator.
Annotated Snippet
#!/usr/bin/env python3
# ex: set filetype=python:
"""Define and implement the Abstract Syntax Tree for the XDR language."""
import sys
from typing import List
from dataclasses import dataclass
from lark import ast_utils, Transformer
from lark.tree import Meta
this_module = sys.modules[__name__]
big_endian = []
excluded_apis = []
header_name = "none"
public_apis = []
structs = set()
pass_by_reference = set()
constants = {}
def xdr_quadlen(val: str) -> int:
"""Return integer XDR width of an XDR type"""
if val in constants:
octets = constants[val]
else:
octets = int(val)
return int((octets + 3) / 4)
symbolic_widths = {
"void": ["XDR_void"],
"bool": ["XDR_bool"],
"short": ["XDR_short"],
"unsigned_short": ["XDR_unsigned_short"],
"int": ["XDR_int"],
"unsigned_int": ["XDR_unsigned_int"],
"long": ["XDR_long"],
"unsigned_long": ["XDR_unsigned_long"],
"hyper": ["XDR_hyper"],
"unsigned_hyper": ["XDR_unsigned_hyper"],
}
# Numeric XDR widths are tracked in a dictionary that is keyed
# by type_name because sometimes a caller has nothing more than
# the type_name to use to figure out the numeric width.
max_widths = {
"void": 0,
"bool": 1,
"short": 1,
"unsigned_short": 1,
"int": 1,
"unsigned_int": 1,
"long": 1,
"unsigned_long": 1,
"hyper": 2,
"unsigned_hyper": 2,
}
@dataclass
class _XdrAst(ast_utils.Ast):
"""Base class for the XDR abstract syntax tree"""
@dataclass
class _XdrIdentifier(_XdrAst):
Annotation
- Atlas domain: Support Tooling And Documentation / tools.
- Implementation status: atlas-only.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.