forked from M-Labs/nac3
WIP
This commit is contained in:
parent
763ab87b32
commit
ad2704ecfa
@ -1 +0,0 @@
|
|||||||
../../target/release/libnac3artiq.so
|
|
@ -43,7 +43,7 @@ use nac3core::{
|
|||||||
OptimizationLevel,
|
OptimizationLevel,
|
||||||
},
|
},
|
||||||
nac3parser::{
|
nac3parser::{
|
||||||
ast::{Constant, ExprKind, Located, Stmt, StmtKind, StrRef},
|
ast::{Constant, ExprKind, Located, Location, Stmt, StmtKind, StrRef},
|
||||||
parser::parse_program,
|
parser::parse_program,
|
||||||
},
|
},
|
||||||
symbol_resolver::SymbolResolver,
|
symbol_resolver::SymbolResolver,
|
||||||
@ -168,9 +168,10 @@ impl Nac3 {
|
|||||||
Ok((module.getattr("__name__")?.extract()?, source_file.to_string(), source))
|
Ok((module.getattr("__name__")?.extract()?, source_file.to_string(), source))
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
let parser_result = parse_program(&source, source_file.into())
|
let parser_result = parse_program(&source, source_file.clone().into())
|
||||||
.map_err(|e| exceptions::PySyntaxError::new_err(format!("parse error: {e}")))?;
|
.map_err(|e| exceptions::PySyntaxError::new_err(format!("parse error: {e}")))?;
|
||||||
|
|
||||||
|
let mut module_content: Vec<Stmt> = Vec::default();
|
||||||
for mut stmt in parser_result {
|
for mut stmt in parser_result {
|
||||||
let include = match stmt.node {
|
let include = match stmt.node {
|
||||||
StmtKind::ClassDef { ref decorator_list, ref mut body, ref mut bases, .. } => {
|
StmtKind::ClassDef { ref decorator_list, ref mut body, ref mut bases, .. } => {
|
||||||
@ -232,9 +233,28 @@ impl Nac3 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if include {
|
if include {
|
||||||
self.top_levels.push((stmt, module_name.clone(), module.clone()));
|
module_content.push(stmt.clone());
|
||||||
|
// self.top_levels.push((stmt, module_name.clone(), module.clone()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let mut module_body: Vec<Stmt> = Vec::default();
|
||||||
|
for stmt in module_content.iter() {
|
||||||
|
match &stmt.node {
|
||||||
|
StmtKind::FunctionDef { .. } => module_body.push(stmt.clone()),
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// let module_def = StmtKind::ModuleDef {
|
||||||
|
// name: module_name.clone().into(),
|
||||||
|
// body: module_body
|
||||||
|
// };
|
||||||
|
// let module_stmt = Located::new(Location::new(1, 1, source_file.into()), module_def);
|
||||||
|
// self.top_levels.push((module_stmt, module_name, module.clone()));
|
||||||
|
|
||||||
|
for stmt in module_content {
|
||||||
|
self.top_levels.push((stmt, module_name.clone().into(), module.clone()));
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1044,6 +1064,34 @@ impl Nac3 {
|
|||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// let mut def_idx: usize = 1;
|
||||||
|
// let mut builtin_methods = Vec::new();
|
||||||
|
// let mut top_levels: Vec<TopLevelComponent> = Vec::new();
|
||||||
|
// for (name, signature, callback) in builtins {
|
||||||
|
// let function_def = TopLevelDef::Function {
|
||||||
|
// name: format!("__builtins__.{name}").into(),
|
||||||
|
// simple_name: name,
|
||||||
|
// signature: signature.ret,
|
||||||
|
// var_id: Vec::new(),
|
||||||
|
// instance_to_symbol: HashMap::new(),
|
||||||
|
// instance_to_stmt: HashMap::new(),
|
||||||
|
// resolver: None,
|
||||||
|
// codegen_callback: Some(callback),
|
||||||
|
// loc: None
|
||||||
|
// };
|
||||||
|
// top_levels.push((
|
||||||
|
// Arc::new(RwLock::new(function_def)),
|
||||||
|
// "__builtins__",
|
||||||
|
// None
|
||||||
|
// ));
|
||||||
|
// builtin_methods.push((
|
||||||
|
// name,
|
||||||
|
// signature.ret,
|
||||||
|
// DefinitionId(def_idx)
|
||||||
|
// ));
|
||||||
|
// def_idx += 1;
|
||||||
|
// }
|
||||||
|
|
||||||
let builtins_mod = PyModule::import(py, "builtins").unwrap();
|
let builtins_mod = PyModule::import(py, "builtins").unwrap();
|
||||||
let id_fn = builtins_mod.getattr("id").unwrap();
|
let id_fn = builtins_mod.getattr("id").unwrap();
|
||||||
let numpy_mod = PyModule::import(py, "numpy").unwrap();
|
let numpy_mod = PyModule::import(py, "numpy").unwrap();
|
||||||
|
@ -115,6 +115,10 @@ pub enum StmtKind<U = ()> {
|
|||||||
type_comment: Option<String>,
|
type_comment: Option<String>,
|
||||||
config_comment: Vec<Ident>,
|
config_comment: Vec<Ident>,
|
||||||
},
|
},
|
||||||
|
// ModuleDef {
|
||||||
|
// name: Ident,
|
||||||
|
// body: Vec<Stmt<U>>,
|
||||||
|
// },
|
||||||
ClassDef {
|
ClassDef {
|
||||||
name: Ident,
|
name: Ident,
|
||||||
bases: Vec<Expr<U>>,
|
bases: Vec<Expr<U>>,
|
||||||
@ -626,6 +630,12 @@ pub mod fold {
|
|||||||
type_comment: Foldable::fold(type_comment, folder)?,
|
type_comment: Foldable::fold(type_comment, folder)?,
|
||||||
config_comment: Foldable::fold(config_comment, folder)?,
|
config_comment: Foldable::fold(config_comment, folder)?,
|
||||||
}),
|
}),
|
||||||
|
// StmtKind::ModuleDef { name, body } => {
|
||||||
|
// Ok(StmtKind::ModuleDef {
|
||||||
|
// name: Foldable::fold(name, folder)?,
|
||||||
|
// body: Foldable::fold(body, folder)?,
|
||||||
|
// })
|
||||||
|
// }
|
||||||
StmtKind::ClassDef { name, bases, keywords, body, decorator_list, config_comment } => {
|
StmtKind::ClassDef { name, bases, keywords, body, decorator_list, config_comment } => {
|
||||||
Ok(StmtKind::ClassDef {
|
Ok(StmtKind::ClassDef {
|
||||||
name: Foldable::fold(name, folder)?,
|
name: Foldable::fold(name, folder)?,
|
||||||
|
@ -224,6 +224,12 @@ impl TopLevelComposer {
|
|||||||
|
|
||||||
let defined_names = &mut self.defined_names;
|
let defined_names = &mut self.defined_names;
|
||||||
match &ast.node {
|
match &ast.node {
|
||||||
|
// ast::StmtKind::ModuleDef { name: module_name, body } => {
|
||||||
|
// // Add any exclusions to module naming here
|
||||||
|
// // Module classes and functions are handled separately
|
||||||
|
// // Register module name and fields here if any
|
||||||
|
// Ok(())
|
||||||
|
// }
|
||||||
ast::StmtKind::ClassDef { name: class_name, bases, body, .. } => {
|
ast::StmtKind::ClassDef { name: class_name, bases, body, .. } => {
|
||||||
if self.keyword_list.contains(class_name) {
|
if self.keyword_list.contains(class_name) {
|
||||||
return Err(format!(
|
return Err(format!(
|
||||||
|
Loading…
Reference in New Issue
Block a user