Files
OxideJS-New/crates/oxide_emit/src/expr/mod.rs
T
pjh123 783e89e4cb feat: 生成器基础支持(YIELD 帧快照挂起/恢复 + GeneratorPrototype next/return/throw)
- 新增 YIELD/SUSPEND_BODY opcode;function* 识别与 yield emit
- GeneratorState 全量快照 VM 执行上下文(regs/pc/bytecode/spill/save/try/cell 栈段/迭代器)
- 调用时参数初始化(默认值/解构副作用与异常在 g() 时刻生效)
- %GeneratorPrototype%/%GeneratorFunction.prototype% 内建对象与 next/return/throw
- session GC trace 生成器状态 JsValues;闭包捕获分析补 yield/赋值目标扫描
2026-08-09 18:02:08 +08:00

38 lines
1.0 KiB
Rust

//! 表达式编译域:表达式分发 + sequence/unsupported。
//!
//! `emit_expression` 按 `Expression` 变体分发到各子模块;本文件还处理
//! 序列表达式(逐项求值取末值)与不支持表达式的报错。
use crate::{CompileCtx, Emitter};
use oxide_parser::Expression;
pub mod assignment;
pub mod call;
pub mod function;
pub mod identifier;
pub mod literal;
pub mod member;
pub mod object;
pub mod operator;
pub mod parenthesized;
pub mod template;
pub mod this;
pub mod yield_expr;
impl Emitter {
pub(crate) fn emit_unsupported_expression(&self, expr: &Expression, ctx: &mut CompileCtx) -> Result<u32, String> {
let _ = ctx;
Err(format!("unsupported expression type: {:?}", expr))
}
pub(crate) fn emit_sequence_expression(
&self, seq: &oxide_parser::SequenceExpression, ctx: &mut CompileCtx,
) -> Result<u32, String> {
let mut last = 0u32;
for e in &seq.expressions {
last = self.emit_expression(e, ctx)?;
}
Ok(last)
}
}