From 0fefa27d5c61a3e52412419231fde74242e73f5e Mon Sep 17 00:00:00 2001 From: Beherith Date: Tue, 25 Jun 2024 15:14:37 +0200 Subject: [PATCH] Disallow shadow naming of static or local vars --- bos2cob_py3.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/bos2cob_py3.py b/bos2cob_py3.py index f27f87a..4187cee 100644 --- a/bos2cob_py3.py +++ b/bos2cob_py3.py @@ -15,8 +15,7 @@ from io import StringIO import pcpp -version = "1.0" - +version = "1.1" parser = argparse.ArgumentParser() parser.add_argument("--shortopcodes", action='store_true', help = "Use uint8_t opcodes (EXPERIMENTAL with engine branch CobShortOpCodes)") @@ -25,7 +24,7 @@ parser.add_argument("--dumpast", action='store_true', help = "Dump the parsed syntax tree into a _initial.ast file") parser.add_argument("--dumppcpp", action='store_true', help = "Dump the results of the pcpp preprocessor") parser.add_argument("--include", type= str, help = "Additional include directory for pcpp preprocessor") -parser.add_argument("filename", type = str, help= "A bos file to compile, or a directory of bos files to work on, such as ../units/myunit.bos") +parser.add_argument("filename", type = str, help= "A bos file to compile, or a directory of bos files to work on, such as ../units/myunit.bos", default= "", nargs='?') args = parser.parse_args() #args.filename = "C:/Users/Peti/Documents/My Games/Spring/games/Beyond-All-Reason.sdd/scripts/Raptors/raptora2.bos" @@ -812,11 +811,22 @@ def parse_arguments(self, node): if len(node.get_children()) == 0: return + local_var_name = node[0].get_text() + if local_var_name in self._static_vars: + raise Exception('Static-var named "%s" already exists. You cannot reuse the same name as local variable or function argument!' % (local_var_name)) + if local_var_name in self._local_vars: + raise Exception('Local-var named "%s" already exists. Multiple definitions are not allowed!' % (local_var_name)) + self._local_vars.append(node[0].get_text()) self._code += OPCODES['CREATE_LOCAL_VAR'] for comma_var in node.get_children()[1:]: if comma_var.get_type() == 'commaVar': + local_var_name = comma_var[1].get_text() + if local_var_name in self._static_vars: + raise Exception('Static-var named "%s" already exists. You cannot reuse the same name as local variable!' % (local_var_name)) + if local_var_name in self._local_vars: + raise Exception('Local-var named "%s" already exists. Multiple definitions are not allowed!' % (local_var_name)) self._local_vars.append(comma_var[1].get_text()) self._code += OPCODES['CREATE_LOCAL_VAR'] @@ -1581,5 +1591,5 @@ def main(path, output_path = None): parser.print_help() print ("Specify a path to a .%s file, or a path to a directory containing .%s files"%(BOS_EXT,BOS_EXT)) - #main("raptorscopy/raptor_worm_m.bos") + #main("C:/Users/Peti/Documents/My Games/Spring/games/Beyond-All-Reason.sdd/scripts/units/armadvsol_clean.bos") #main("unitscopy/")