11# -*- coding: utf-8 -*-
22
33from collections import OrderedDict
4+ from typing import NamedTuple , List
5+
46from src .api .errmsg import syntax_error_not_constant
57from src .api .errmsg import syntax_error_cant_convert_to_type
68from src .api .debug import __DEBUG__
2527
2628from .backend .runtime import RUNTIME_LABELS
2729from .backend .runtime import LABEL_REQUIRED_MODULES
30+ from src .ast .tree import ChildrenList
31+
32+
33+ class JumpTable (NamedTuple ):
34+ label : str
35+ addresses : ChildrenList
2836
2937
3038class TranslatorVisitor (TranslatorInstVisitor ):
@@ -48,7 +56,7 @@ class TranslatorVisitor(TranslatorInstVisitor):
4856
4957 LOOPS = [] # Defined LOOPS
5058 STRING_LABELS = OrderedDict ()
51- JUMP_TABLES = []
59+ JUMP_TABLES : List [ JumpTable ] = []
5260
5361 # Type code used in DATA
5462 DATA_TYPES = {"str" : 1 , "i8" : 2 , "u8" : 3 , "i16" : 4 , "u16" : 5 , "i32" : 6 , "u32" : 7 , "f16" : 8 , "f" : 9 }
@@ -163,11 +171,13 @@ def emit_strings(self):
163171
164172 def emit_jump_tables (self ):
165173 for table_ in self .JUMP_TABLES :
166- self .ic_vard (table_ .label , [str (len (table_ .addresses ))] + ["##" + x .mangled for x in table_ .addresses ])
174+ self .ic_vard (
175+ table_ .label , [f"#{ str (len (table_ .addresses ))} " ] + [f"##{ x .mangled } " for x in table_ .addresses ]
176+ )
167177
168178 def _visit (self , node ):
169179 if isinstance (node , Symbol ):
170- __DEBUG__ ("Visiting {}" . format ( node .token ) , 1 )
180+ __DEBUG__ (f "Visiting { node .token } " , 1 )
171181 if node .token in self .ATTR_TMP :
172182 return self .visit_ATTR_TMP (node )
173183
0 commit comments