mirror of
https://github.com/oxc-project/oxc.git
synced 2026-09-14 19:36:11 +08:00
60fa13878c
### 💥 BREAKING CHANGES -66744f0parser: [**BREAKING**] Rename `panicked` to `fatal_error` in `ParserReturn` (#26382) (overlookmotel) -2c9a947parser: [**BREAKING**] Reduce `MAX_LEN` to 256 bytes below `u32::MAX` (#26352) (overlookmotel) ### 🚀 Features -32bdc5ballocator: Construct `ArenaHashSet` with any `Default` hasher (#26372) (Dunqing) -a17de58minifier: Process of return/throw in non last position and fix async * inlining (#26214) (Armano) -bfb4c57parser: Distinguish unapplied no-side-effects comments (#26120) (碳苯 Carbon) -1d9b9d3ast: Add `GetNodeId` trait (#26145) (camc314) ### 🐛 Bug Fixes -b156333codegen: Order accessibility before abstract on accessors (#26392) (camc314) -116c8b8transformer/class-properties: Keep private methods in class-expression scope (#26308) (Changsu Seong) -1400a0fparser: Require a string source after `export ... from` (#26389) (camc314) -2da73b7codegen: Print matching quoted import names as identifiers (#26386) (camc314) -0a81d29codegen: Preserve private-in left operand precedence (#26383) (camc314) -9a02337parser: Correctly round large nondecimal literals (#26379) (camc314) -3d95477transformer: Gate async-only rewrites by owning transform (#26326) (Dunqing) -f45a9eetransformer: Limit arguments capture to lowered async functions (#26317) (Dunqing) -789969ftransformer: Gate this capture by owning async transform (#26227) (Dunqing) -affeb14minifier: Mangle class private members in Node API (#26118) (碳苯 Carbon) -8b35abdsemantic: Detect duplicate private class elements (#26361) (camc314) -457ed57semantic: Reject await and yield in rest parameter defaults (#26359) (camc314) -4b89c7bsemantic: Reject jumps across arrow functions (#26357) (camc314) -c966acaparser: Do not omit `<` token opening type argument list (#26328) (overlookmotel) -f07dca5ast_visit: Add the trimmed prefix length to translation table offsets (#26173) (Bharadwaj Pendyala) -3ab9bd1parser: Do not re-lex template substitution tail after fatal error (#26230) (overlookmotel) -07851b9parser: Fix debug assert failure when lexer error with tokens enabled (#26229) (overlookmotel) -00dea7aallocator: Gate `Allocator::data_end_ptr` behind fixed_size feature (#26248) (camc314) -853ffabecmascript: Avoid `charAt` panic on 32-bit (#26244) (camc314) -34feccbruntime: Remove stale regenerator exports (#26243) (camc314) ### ⚡ Performance -34a242eminifier: Use `Ident` for property mangler (#26334) (sapphi-red) -5303f5cminifier: Unify merging of last expression into target sequence (#26264) (Armano) -2ca7d29minifier: Consume nodes in minimize_statements in reverse order (#26258) (Armano) -d2354b4mangler: Use `Ident` for variable names to keep (#26333) (sapphi-red) -5b3e335minifier: Use `Ident` instead of `Str` in `KeepVar` (#26332) (sapphi-red) -51366fbminifier: Use `IdentHashSet` in `PrivateMemberUsageStack` (#26331) (sapphi-red) -d19c42aminifier: Merge nested if stmt in place instead of creating dummies (#26351) (Armano) -356def6parser: Shrink annotation comment ranges (#26356) (overlookmotel) -a5be474parser: Shave instruction off `parse_jsx_element_name` (#26355) (overlookmotel) -9780663parser: Remove fatal error guard from `parse_jsx_element_name` (#26354) (overlookmotel) -766e12fparser: Remove `token` field from `LexerCheckpoint` (#26350) (overlookmotel) ### 📚 Documentation -d4b4e61transformer: Document ES2015 target floor (#26378) (Dunqing) -67dd054ast_visit: Correct out-of-date comments on `Utf8ToUtf16` converter (#26285) (overlookmotel) -a8ed2a7minifier: Fix stale validation instructions (#26251) (camc314)
Oxc CFG
Control Flow Graph construction and analysis for JavaScript and TypeScript.
Overview
This crate provides data structures and algorithms for building and analyzing Control Flow Graphs (CFGs) from AST nodes. CFGs are essential for advanced static analysis, optimization, and understanding program flow.
Key Features
- CFG construction: Build control flow graphs from AST nodes
- Block-based representation: Organizes code into basic blocks
- Graph analysis: Traverse and analyze control flow patterns
- DOT export: Visualize CFGs using Graphviz dot format
- Visitor integration: Works with oxc visitor patterns
Architecture
Basic Blocks
The CFG organizes code into basic blocks - sequences of instructions with:
- Single entry point (first instruction)
- Single exit point (last instruction)
- No internal branches or jumps
Graph Structure
- Nodes: Basic blocks containing instructions
- Edges: Control flow between blocks (conditional, unconditional, exception)
- Entry/Exit: Special blocks for function entry and exit points
Analysis Applications
- Dead code elimination: Find unreachable blocks
- Data flow analysis: Track variable usage across control paths
- Loop detection: Identify back edges and loop structures
- Path analysis: Enumerate possible execution paths
The CFG integrates with semantic analysis to provide comprehensive program understanding.