From 314f4a1a0da455db41554a1b829d54910f944f48 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Fri, 4 Oct 2019 16:16:10 -0700 Subject: [PATCH] Fix several cases of name shadowing, and greatly simplify some unnecessary stack operations with tuple appending. --- ASTree.cpp | 104 +++++++++++++++---------------------------------- CMakeLists.txt | 2 +- 2 files changed, 32 insertions(+), 74 deletions(-) diff --git a/ASTree.cpp b/ASTree.cpp index 15ebfcc..c62ecef 100644 --- a/ASTree.cpp +++ b/ASTree.cpp @@ -245,20 +245,20 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) break; case Pyc::BUILD_CLASS: { - PycRef code = stack.top(); + PycRef class_code = stack.top(); stack.pop(); PycRef bases = stack.top(); stack.pop(); PycRef name = stack.top(); stack.pop(); - stack.push(new ASTClass(code, bases, name)); + stack.push(new ASTClass(class_code, bases, name)); } break; case Pyc::BUILD_FUNCTION: { - PycRef code = stack.top(); + PycRef fun_code = stack.top(); stack.pop(); - stack.push(new ASTFunction(code, ASTFunction::defarg_t())); + stack.push(new ASTFunction(fun_code, ASTFunction::defarg_t())); } break; case Pyc::BUILD_LIST_A: @@ -435,17 +435,17 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) PycRef param = stack.top(); stack.pop(); if (param.type() == ASTNode::NODE_FUNCTION) { - PycRef code = param.cast()->code(); - PycRef code_src = code.cast()->object().cast(); + PycRef fun_code = param.cast()->code(); + PycRef code_src = fun_code.cast()->object().cast(); PycRef function_name = code_src->name(); if (function_name->isEqual("")) { pparamList.push_front(param); } else { // Decorator used - PycRef name = new ASTName(function_name); - curblock->append(new ASTStore(param, name)); + PycRef decor_name = new ASTName(function_name); + curblock->append(new ASTStore(param, decor_name)); - pparamList.push_front(name); + pparamList.push_front(decor_name); } } else { pparamList.push_front(param); @@ -1326,14 +1326,14 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) case Pyc::MAKE_CLOSURE_A: case Pyc::MAKE_FUNCTION_A: { - PycRef code = stack.top(); + PycRef fun_code = stack.top(); stack.pop(); /* Test for the qualified name of the function (at TOS) */ - int tos_type = code.cast()->object().type(); + int tos_type = fun_code.cast()->object().type(); if (tos_type != PycObject::TYPE_CODE && tos_type != PycObject::TYPE_CODE2) { - code = stack.top(); + fun_code = stack.top(); stack.pop(); } @@ -1342,7 +1342,7 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) defArgs.push_front(stack.top()); stack.pop(); } - stack.push(new ASTFunction(code, defArgs)); + stack.push(new ASTFunction(fun_code, defArgs)); } break; case Pyc::NOP: @@ -1707,19 +1707,12 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) PycRef attr = new ASTBinary(name, new ASTName(code->getName(operand)), ASTBinary::BIN_ATTR); PycRef tup = stack.top(); - if (tup.type() == ASTNode::NODE_TUPLE) { - stack.pop(); - - PycRef tuple = tup.cast(); - tuple->add(attr); - - stack.push(tuple.cast()); - } else { + if (tup.type() == ASTNode::NODE_TUPLE) + tup.cast()->add(attr); + else fputs("Something TERRIBLE happened!\n", stderr); - } if (--unpack <= 0) { - PycRef tup = stack.top(); stack.pop(); PycRef seq = stack.top(); stack.pop(); @@ -1743,19 +1736,12 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) PycRef name = new ASTName(code->getCellVar(operand)); PycRef tup = stack.top(); - if (tup.type() == ASTNode::NODE_TUPLE) { - stack.pop(); - - PycRef tuple = tup.cast(); - tuple->add(name); - - stack.push(tuple.cast()); - } else { + if (tup.type() == ASTNode::NODE_TUPLE) + tup.cast()->add(name); + else fputs("Something TERRIBLE happened!\n", stderr); - } if (--unpack <= 0) { - PycRef tup = stack.top(); stack.pop(); PycRef seq = stack.top(); stack.pop(); @@ -1781,19 +1767,12 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) name = new ASTName(code->getVarName(operand)); PycRef tup = stack.top(); - if (tup.type() == ASTNode::NODE_TUPLE) { - stack.pop(); - - PycRef tuple = tup.cast(); - tuple->add(name); - - stack.push(tuple.cast()); - } else { + if (tup.type() == ASTNode::NODE_TUPLE) + tup.cast()->add(name); + else fputs("Something TERRIBLE happened!\n", stderr); - } if (--unpack <= 0) { - PycRef tup = stack.top(); stack.pop(); PycRef seq = stack.top(); stack.pop(); @@ -1843,19 +1822,12 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) if (unpack) { PycRef tup = stack.top(); - if (tup.type() == ASTNode::NODE_TUPLE) { - stack.pop(); - - PycRef tuple = tup.cast(); - tuple->add(name); - - stack.push(tuple.cast()); - } else { + if (tup.type() == ASTNode::NODE_TUPLE) + tup.cast()->add(name); + else fputs("Something TERRIBLE happened!\n", stderr); - } if (--unpack <= 0) { - PycRef tup = stack.top(); stack.pop(); PycRef seq = stack.top(); stack.pop(); @@ -1886,19 +1858,12 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) PycRef name = new ASTName(code->getName(operand)); PycRef tup = stack.top(); - if (tup.type() == ASTNode::NODE_TUPLE) { - stack.pop(); - - PycRef tuple = tup.cast(); - tuple->add(name); - - stack.push(tuple.cast()); - } else { + if (tup.type() == ASTNode::NODE_TUPLE) + tup.cast()->add(name); + else fputs("Something TERRIBLE happened!\n", stderr); - } if (--unpack <= 0) { - PycRef tup = stack.top(); stack.pop(); PycRef seq = stack.top(); stack.pop(); @@ -2005,19 +1970,12 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) PycRef save = new ASTSubscr(dest, subscr); PycRef tup = stack.top(); - if (tup.type() == ASTNode::NODE_TUPLE) { - stack.pop(); - - PycRef tuple = tup.cast(); - tuple->add(save); - - stack.push(tuple.cast()); - } else { + if (tup.type() == ASTNode::NODE_TUPLE) + tup.cast()->add(save); + else fputs("Something TERRIBLE happened!\n", stderr); - } if (--unpack <= 0) { - PycRef tup = stack.top(); stack.pop(); PycRef seq = stack.top(); stack.pop(); diff --git a/CMakeLists.txt b/CMakeLists.txt index 099997a..bd33b46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(PythonInterp REQUIRED) if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - set(CMAKE_CXX_FLAGS "-Wall -Wextra -Werror ${CMAKE_CXX_FLAGS}") + set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wshadow -Werror ${CMAKE_CXX_FLAGS}") endif() set(PYTHON_VERSIONS