fix: bug when DeQuate

This commit is contained in:
2023-11-09 18:21:17 +08:00
parent 9b8b23e738
commit d3392e7743

View File

@ -69,7 +69,7 @@ std::any EvalVisitor::visitExpr_stmt(Python3Parser::Expr_stmtContext *ctx) {
if (ctx->augassign()) { if (ctx->augassign()) {
auto left_value = visitTestlist(ctx->testlist(0)); auto left_value = visitTestlist(ctx->testlist(0));
auto right_value = visitTestlist(ctx->testlist(1)); auto right_value = visitTestlist(ctx->testlist(1));
DeQuate(right_value, Variables); right_value = DeQuate(right_value, Variables);
RawVarible *ptr_var = std::any_cast<RawVarible>(&left_value); RawVarible *ptr_var = std::any_cast<RawVarible>(&left_value);
std::vector<std::any> *ptr_vec = std::vector<std::any> *ptr_vec =
std::any_cast<std::vector<std::any>>(&left_value); std::any_cast<std::vector<std::any>>(&left_value);
@ -245,11 +245,11 @@ std::any EvalVisitor::visitComparison(Python3Parser::ComparisonContext *ctx) {
auto arith_expr_list = ctx->arith_expr(); auto arith_expr_list = ctx->arith_expr();
auto last_val = visitArith_expr(arith_expr_list[0]); auto last_val = visitArith_expr(arith_expr_list[0]);
if (arith_expr_list.size() == 1) return last_val; if (arith_expr_list.size() == 1) return last_val;
DeQuate(last_val, Variables); last_val = DeQuate(last_val, Variables);
auto op_list = ctx->comp_op(); auto op_list = ctx->comp_op();
for (int i = 0; i < op_list.size(); i++) { for (int i = 0; i < op_list.size(); i++) {
auto cur = visitArith_expr(arith_expr_list[i + 1]); auto cur = visitArith_expr(arith_expr_list[i + 1]);
DeQuate(cur, Variables); cur = DeQuate(cur, Variables);
bool ok = false; bool ok = false;
if (op_list[i]->GREATER_THAN()) if (op_list[i]->GREATER_THAN())
ok = Greater(last_val, cur); ok = Greater(last_val, cur);
@ -280,10 +280,10 @@ std::any EvalVisitor::visitArith_expr(Python3Parser::Arith_exprContext *ctx) {
auto ans = visitTerm(term_list[0]); auto ans = visitTerm(term_list[0]);
if (term_list.size() == 1) return ans; if (term_list.size() == 1) return ans;
auto op_list = ctx->addorsub_op(); auto op_list = ctx->addorsub_op();
DeQuate(ans, Variables); ans = DeQuate(ans, Variables);
for (int i = 0; i < op_list.size(); i++) { for (int i = 0; i < op_list.size(); i++) {
auto cur = visitTerm(term_list[i + 1]); auto cur = visitTerm(term_list[i + 1]);
DeQuate(cur, Variables); cur = DeQuate(cur, Variables);
if (op_list[i]->ADD()) if (op_list[i]->ADD())
SelfAdd(ans, cur); SelfAdd(ans, cur);
else if (op_list[i]->MINUS()) else if (op_list[i]->MINUS())
@ -303,10 +303,10 @@ std::any EvalVisitor::visitTerm(Python3Parser::TermContext *ctx) {
auto ans = visitFactor(factor_list[0]); auto ans = visitFactor(factor_list[0]);
if (factor_list.size() == 1) return ans; if (factor_list.size() == 1) return ans;
auto op_list = ctx->muldivmod_op(); auto op_list = ctx->muldivmod_op();
DeQuate(ans, Variables); ans = DeQuate(ans, Variables);
for (int i = 0; i < op_list.size(); i++) { for (int i = 0; i < op_list.size(); i++) {
auto cur = visitFactor(factor_list[i + 1]); auto cur = visitFactor(factor_list[i + 1]);
DeQuate(cur, Variables); cur = DeQuate(cur, Variables);
if (op_list[i]->STAR()) if (op_list[i]->STAR())
SelfMul(ans, cur); SelfMul(ans, cur);
else if (op_list[i]->DIV()) else if (op_list[i]->DIV())