mirror of https://github.com/mtshiba/pylyzer
Update convert.rs
This commit is contained in:
parent
fe550a51ef
commit
e464e8dc79
|
|
@ -406,6 +406,21 @@ impl ASTConverter {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// (i, j) => $1 (i = $1[0]; j = $1[1])
|
/// (i, j) => $1 (i = $1[0]; j = $1[1])
|
||||||
|
fn convert_opt_expr_to_param(
|
||||||
|
&mut self,
|
||||||
|
expr: Option<Located<ExpressionType>>,
|
||||||
|
) -> (NonDefaultParamSignature, Vec<Expr>) {
|
||||||
|
if let Some(expr) = expr {
|
||||||
|
self.convert_expr_to_param(expr)
|
||||||
|
} else {
|
||||||
|
let token = Token::new(TokenKind::UBar, "_", 0, 0);
|
||||||
|
(
|
||||||
|
NonDefaultParamSignature::new(ParamPattern::Discard(token), None),
|
||||||
|
vec![],
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn convert_expr_to_param(
|
fn convert_expr_to_param(
|
||||||
&mut self,
|
&mut self,
|
||||||
expr: Located<ExpressionType>,
|
expr: Located<ExpressionType>,
|
||||||
|
|
@ -463,8 +478,8 @@ impl ASTConverter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn convert_for_body(&mut self, lhs: Located<ExpressionType>, body: Suite) -> Lambda {
|
fn convert_for_body(&mut self, lhs: Option<Located<ExpressionType>>, body: Suite) -> Lambda {
|
||||||
let (param, block) = self.convert_expr_to_param(lhs);
|
let (param, block) = self.convert_opt_expr_to_param(lhs);
|
||||||
let params = Params::new(vec![param], None, vec![], None);
|
let params = Params::new(vec![param], None, vec![], None);
|
||||||
self.block_id_counter += 1;
|
self.block_id_counter += 1;
|
||||||
self.block_ids.push(self.block_id_counter);
|
self.block_ids.push(self.block_id_counter);
|
||||||
|
|
@ -1098,7 +1113,8 @@ impl ASTConverter {
|
||||||
elem.location.row() as u32,
|
elem.location.row() as u32,
|
||||||
elem.location.column() as u32 - 1,
|
elem.location.column() as u32 - 1,
|
||||||
));
|
));
|
||||||
let (param, mut blocks) = self.convert_expr_to_param(elem);
|
let (param, mut blocks) =
|
||||||
|
self.convert_opt_expr_to_param(Some(elem));
|
||||||
let sig = Signature::Var(VarSignature::new(
|
let sig = Signature::Var(VarSignature::new(
|
||||||
Self::param_pattern_to_var(param.pat),
|
Self::param_pattern_to_var(param.pat),
|
||||||
param.t_spec.map(|t| t.t_spec),
|
param.t_spec.map(|t| t.t_spec),
|
||||||
|
|
@ -1251,7 +1267,7 @@ impl ASTConverter {
|
||||||
orelse: _,
|
orelse: _,
|
||||||
} => {
|
} => {
|
||||||
let iter = self.convert_expr(*iter);
|
let iter = self.convert_expr(*iter);
|
||||||
let block = self.convert_for_body(*target, body);
|
let block = self.convert_for_body(Some(*target), body);
|
||||||
let for_ident = self.convert_ident("for".to_string(), stmt.location);
|
let for_ident = self.convert_ident("for".to_string(), stmt.location);
|
||||||
let for_acc = Expr::Accessor(Accessor::Ident(for_ident));
|
let for_acc = Expr::Accessor(Accessor::Ident(for_ident));
|
||||||
for_acc.call_expr(Args::new(
|
for_acc.call_expr(Args::new(
|
||||||
|
|
@ -1385,7 +1401,8 @@ impl ASTConverter {
|
||||||
let import_acc = Expr::Accessor(Accessor::Ident(
|
let import_acc = Expr::Accessor(Accessor::Ident(
|
||||||
self.convert_ident("__import__".to_string(), stmt.location),
|
self.convert_ident("__import__".to_string(), stmt.location),
|
||||||
));
|
));
|
||||||
let cont = format!("\"{}\"", module.clone().unwrap());
|
// from . import foo ==> import "./foo"
|
||||||
|
let cont = format!("\"{}\"", module.clone().unwrap_or(names[0].symbol.clone()));
|
||||||
let mod_name = Expr::Lit(Literal::new(Token::new(
|
let mod_name = Expr::Lit(Literal::new(Token::new(
|
||||||
TokenKind::StrLit,
|
TokenKind::StrLit,
|
||||||
cont,
|
cont,
|
||||||
|
|
@ -1464,7 +1481,7 @@ impl ASTConverter {
|
||||||
} => {
|
} => {
|
||||||
let item = items.remove(0);
|
let item = items.remove(0);
|
||||||
let context_expr = self.convert_expr(item.context_expr);
|
let context_expr = self.convert_expr(item.context_expr);
|
||||||
let body = self.convert_for_body(item.optional_vars.unwrap(), body);
|
let body = self.convert_for_body(item.optional_vars, body);
|
||||||
let with_ident = self.convert_ident("with".to_string(), stmt.location);
|
let with_ident = self.convert_ident("with".to_string(), stmt.location);
|
||||||
let with_acc = Expr::Accessor(Accessor::Ident(with_ident));
|
let with_acc = Expr::Accessor(Accessor::Ident(with_ident));
|
||||||
with_acc.call_expr(Args::new(
|
with_acc.call_expr(Args::new(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue