# HG changeset patch # User Emmanuel Gil Peyrot # Date 1464825629 -3600 # Node ID 3bf4903d1d2c6da3f72107587dc6ed34dc459a1f # Parent fa7e285f88e72d22aa3d0ed265e329cba8388f5a Add Assign and ImportFrom bindings. diff --git a/example/blocks.py b/example/blocks.py --- a/example/blocks.py +++ b/example/blocks.py @@ -1,5 +1,6 @@ def a(b): def c(): return b + b = 2 return c() print(a(1)) diff --git a/src/ast_scope.rs b/src/ast_scope.rs --- a/src/ast_scope.rs +++ b/src/ast_scope.rs @@ -98,16 +98,45 @@ pub fn scope_ast(ast: Module) -> Scoping } */ +fn scope_expr(expr: Expr, block: &mut Block) { + println!("{:?}", expr); +} + fn scope_statement(statement: Statement, block: &mut Block) { let new_block = match statement.clone() { + Statement::Assign(targets, value) => { + //scope_expr(value, &mut block); + for target in targets { + match target { + Expr::Name(name) => block.bindings.push(name), + _ => () // No new binding. + } + } + None + }, Statement::FunctionDef(name, args, statements) => { block.bindings.push(name.clone()); let mut function_block = Block{statements: vec!(), bindings: args.clone()}; - for other_statement in statements { - scope_statement(other_statement, &mut function_block); + for statement in statements { + scope_statement(statement, &mut function_block); } Some(Box::new(function_block)) }, + Statement::ImportFrom(module, names) => { + for name in names { + let name = match name { + Expr::Alias(name, asname) => (name, asname), + _ => panic!() + }; + let nameas = name.1; + let name = name.0; + match nameas { + Some(name) => block.bindings.push(name), + None => block.bindings.push(name) + } + } + None + }, _ => None }; block.statements.push((statement, new_block));