diff --git a/CMakeLists.txt b/CMakeLists.txt index 42d3f2b..0dcb9c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.15.2) project(python_interpreter) set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address") include_directories(/usr/include/antlr4-runtime/) include_directories( diff --git a/src/Evalvisitor.cpp b/src/Evalvisitor.cpp index 757b8e8..7d0d3a8 100644 --- a/src/Evalvisitor.cpp +++ b/src/Evalvisitor.cpp @@ -184,6 +184,7 @@ std::any EvalVisitor::visitContinue_stmt( std::any EvalVisitor::visitReturn_stmt(Python3Parser::Return_stmtContext *ctx) { if (!ctx->testlist()) return FlowType(RETURN, std::vector()); std::any val = visitTestlist(ctx->testlist()); + val = DeQuate(val, Variables); std::vector *val_ptr = std::any_cast>(&val); if (val_ptr) return FlowType(RETURN, *val_ptr); std::vector tmp; diff --git a/src/names.cpp b/src/names.cpp index 79747ff..bfdfcbe 100644 --- a/src/names.cpp +++ b/src/names.cpp @@ -15,7 +15,7 @@ std::any VariableContainer::ReadVariable(const std::string &name) { if (top.find(name) != top.end()) return top[name]; } if (GlobalScope.find(name) != GlobalScope.end()) return GlobalScope[name]; - throw InterpretException(("ReadVariable: " + name + " not found").c_str()); + throw InterpretException(("ReadVariable: not found")); } void VariableContainer::WriteVariable(const std::string &name, const std::any &value, bool cover) {