fix: bug when DeQuate
This commit is contained in:
@ -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())
|
||||||
|
Reference in New Issue
Block a user