comparison src/ast_scope.rs @ 10:3bf4903d1d2c

Add Assign and ImportFrom bindings.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Thu, 02 Jun 2016 01:00:29 +0100
parents fa7e285f88e7
children 5c169d5807b5
comparison
equal deleted inserted replaced
9:fa7e285f88e7 10:3bf4903d1d2c
96 scoping.visit(vec!(ast)); 96 scoping.visit(vec!(ast));
97 scoping 97 scoping
98 } 98 }
99 */ 99 */
100 100
101 fn scope_expr(expr: Expr, block: &mut Block) {
102 println!("{:?}", expr);
103 }
104
101 fn scope_statement(statement: Statement, block: &mut Block) { 105 fn scope_statement(statement: Statement, block: &mut Block) {
102 let new_block = match statement.clone() { 106 let new_block = match statement.clone() {
107 Statement::Assign(targets, value) => {
108 //scope_expr(value, &mut block);
109 for target in targets {
110 match target {
111 Expr::Name(name) => block.bindings.push(name),
112 _ => () // No new binding.
113 }
114 }
115 None
116 },
103 Statement::FunctionDef(name, args, statements) => { 117 Statement::FunctionDef(name, args, statements) => {
104 block.bindings.push(name.clone()); 118 block.bindings.push(name.clone());
105 let mut function_block = Block{statements: vec!(), bindings: args.clone()}; 119 let mut function_block = Block{statements: vec!(), bindings: args.clone()};
106 for other_statement in statements { 120 for statement in statements {
107 scope_statement(other_statement, &mut function_block); 121 scope_statement(statement, &mut function_block);
108 } 122 }
109 Some(Box::new(function_block)) 123 Some(Box::new(function_block))
124 },
125 Statement::ImportFrom(module, names) => {
126 for name in names {
127 let name = match name {
128 Expr::Alias(name, asname) => (name, asname),
129 _ => panic!()
130 };
131 let nameas = name.1;
132 let name = name.0;
133 match nameas {
134 Some(name) => block.bindings.push(name),
135 None => block.bindings.push(name)
136 }
137 }
138 None
110 }, 139 },
111 _ => None 140 _ => None
112 }; 141 };
113 block.statements.push((statement, new_block)); 142 block.statements.push((statement, new_block));
114 } 143 }