Refactor symboltables and _ast to use codegen when possible

This commit is contained in:
Jeong YunWon 2022-08-22 05:19:36 +09:00
parent 060d153bb3
commit 9c229ebb99
4 changed files with 24 additions and 25 deletions

View file

@ -14,18 +14,6 @@ use crate::{
use rustpython_ast::{self as ast, Location};
use std::{borrow::Cow, fmt};
pub fn make_symbol_table(program: &[ast::Stmt]) -> SymbolTableResult<SymbolTable> {
let mut builder = SymbolTableBuilder::new();
builder.scan_statements(program)?;
builder.finish()
}
pub fn make_symbol_table_expr(expr: &ast::Expr) -> SymbolTableResult<SymbolTable> {
let mut builder = SymbolTableBuilder::new();
builder.scan_expression(expr, ExpressionContext::Load)?;
builder.finish()
}
/// Captures all symbols in the current scope, and has a list of subscopes in this scope.
#[derive(Clone)]
pub struct SymbolTable {
@ -60,6 +48,18 @@ impl SymbolTable {
sub_tables: vec![],
}
}
pub fn scan_program(program: &[ast::Stmt]) -> SymbolTableResult<Self> {
let mut builder = SymbolTableBuilder::new();
builder.scan_statements(program)?;
builder.finish()
}
pub fn scan_expr(expr: &ast::Expr) -> SymbolTableResult<Self> {
let mut builder = SymbolTableBuilder::new();
builder.scan_expression(expr, ExpressionContext::Load)?;
builder.finish()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]