From db0444dabd66c7e7a6b965be6e6d31286c489854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=E7=89=B9=E6=AF=8F=E7=BE=8A=E9=98=9F?= Date: Thu, 25 Jun 2026 19:46:35 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20CompileCtx=20=E6=8B=86=E5=88=86?= =?UTF-8?q?=E4=B8=BA=20LabelCtx/ScopeCtx=EF=BC=8C=E5=AD=97=E9=9D=A2?= =?UTF-8?q?=E9=87=8F=E5=9F=9F=E6=94=B9=E7=94=A8=E6=B3=A8=E5=86=8C=E8=A1=A8?= =?UTF-8?q?=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_compiler/src/compiler.rs | 130 +++++++++--------- .../src/counter/expr/assignment.rs | 6 +- .../oxide_compiler/src/counter/expr/chain.rs | 4 +- .../src/counter/expr/control.rs | 8 +- .../src/counter/expr/literal.rs | 11 ++ crates/oxide_compiler/src/counter/expr/mod.rs | 6 +- .../src/counter/helper/member.rs | 2 +- .../oxide_compiler/src/counter/stmt/basic.rs | 2 +- .../src/counter/stmt/control.rs | 4 +- .../src/counter/stmt/exception.rs | 6 +- .../src/counter/stmt/iteration.rs | 22 +-- .../oxide_compiler/src/counter/stmt/switch.rs | 4 +- crates/oxide_compiler/src/emit_ctx.rs | 38 +++++ .../src/emitter/expr/literal.rs | 14 ++ crates/oxide_compiler/src/emitter/mod.rs | 29 ++-- .../src/emitter/stmt/exception.rs | 6 +- crates/oxide_compiler/src/lib.rs | 1 + 17 files changed, 180 insertions(+), 113 deletions(-) create mode 100644 crates/oxide_compiler/src/emit_ctx.rs diff --git a/crates/oxide_compiler/src/compiler.rs b/crates/oxide_compiler/src/compiler.rs index 2dd2ec9..bdafe39 100644 --- a/crates/oxide_compiler/src/compiler.rs +++ b/crates/oxide_compiler/src/compiler.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; +use crate::emit_ctx::{LabelCtx, ScopeCtx}; use crate::symbol_table::{Binding, SymbolTable}; use oxide_bytecode::module::CompiledModule; use oxide_bytecode::opcode::{self, OpCode}; @@ -145,18 +146,9 @@ pub(crate) struct CompileCtx { next_reg: u8, pub(crate) max_regs: u8, reserved_reg_start: u8, - symbols: SymbolTable, - pub(crate) label_map: HashMap, - pub(crate) loop_stack: Vec<(Label, Label)>, - #[allow(dead_code)] - pub(crate) switch_stack: Vec