From 8fe632ad545dddcef4caac70c7df01f4924b0112 Mon Sep 17 00:00:00 2001 From: JulienBvr Date: Wed, 30 Mar 2022 11:57:27 +0200 Subject: [PATCH 1/2] en cours --- compiler/ast/ast.cpp | 4 +++- compiler/intermediateRepresentation/CFG.cpp | 12 ++++++++++++ compiler/intermediateRepresentation/IR.h | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/compiler/ast/ast.cpp b/compiler/ast/ast.cpp index 5c339d9..bb06e54 100644 --- a/compiler/ast/ast.cpp +++ b/compiler/ast/ast.cpp @@ -2,7 +2,9 @@ string ExprVar::linearize(CFG * cfg) { - return varName; + if(cfg->get_current_level() == cfg->get_level(varName)){ + return varName; + } } string ExprConst::linearize(CFG * cfg) diff --git a/compiler/intermediateRepresentation/CFG.cpp b/compiler/intermediateRepresentation/CFG.cpp index f6f90b6..c24121b 100644 --- a/compiler/intermediateRepresentation/CFG.cpp +++ b/compiler/intermediateRepresentation/CFG.cpp @@ -15,6 +15,18 @@ CFG::~CFG() { } } +string CFG::get_current_level() +{ + return symbolTable->current_function; +} + +string CFG::get_level(string varName) +{ + string nameArray[] = split(varName,"_"); + string level = nameArray[nameArray.length-1]; + return level; +} + void CFG::add_bb(BasicBlock *bb) { current_bb = bb; diff --git a/compiler/intermediateRepresentation/IR.h b/compiler/intermediateRepresentation/IR.h index de0a0f9..2e63aff 100644 --- a/compiler/intermediateRepresentation/IR.h +++ b/compiler/intermediateRepresentation/IR.h @@ -160,6 +160,8 @@ class CFG void add_to_symbol_table(string name, TypeSymbol t, StateSymbol stateSymbol); string create_new_tempvar(TypeSymbol t); int get_var_index(string name); + string get_current_level(); + string get_level(string varName); TypeSymbol get_var_type(string name); void assignSymbol(string name); bool isAssigneSymbol(string name); From 760e865ca2c2a77036ffb59b9b22fdf3b1611f5c Mon Sep 17 00:00:00 2001 From: JulienBvr Date: Sat, 2 Apr 2022 12:05:12 +0200 Subject: [PATCH 2/2] Save before create a new local branch --- compiler/ast/ast.cpp | 9 +++++++++ compiler/intermediateRepresentation/CFG.cpp | 13 +++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/compiler/ast/ast.cpp b/compiler/ast/ast.cpp index bb06e54..f692f2f 100644 --- a/compiler/ast/ast.cpp +++ b/compiler/ast/ast.cpp @@ -5,6 +5,15 @@ string ExprVar::linearize(CFG * cfg) if(cfg->get_current_level() == cfg->get_level(varName)){ return varName; } + else + { + // TODO:: Gérer les erreurs + /* + Error *error = new Error(); + ErrorManager::addError(error); + */ + return NULL; + } } string ExprConst::linearize(CFG * cfg) diff --git a/compiler/intermediateRepresentation/CFG.cpp b/compiler/intermediateRepresentation/CFG.cpp index c24121b..20fbaa8 100644 --- a/compiler/intermediateRepresentation/CFG.cpp +++ b/compiler/intermediateRepresentation/CFG.cpp @@ -1,4 +1,7 @@ #include +#include +#include + using namespace std; #include "IR.h" @@ -22,8 +25,14 @@ string CFG::get_current_level() string CFG::get_level(string varName) { - string nameArray[] = split(varName,"_"); - string level = nameArray[nameArray.length-1]; + //Extract the number after the last "_" in the variable name (ex : a_1, or get_var_2). + string level; + string token = strtok(varName,"_"); + while(token!= NULL) + { + level = token; + token = strtok(NULL, "-"); + } return level; }