@@ -1323,11 +1323,11 @@ def start(self):
13231323 self .visit (f )
13241324
13251325 def visit_FUNCTION (self , node ):
1326- self .emit ( 'label' , node .mangled )
1326+ self .ic_label ( node .mangled )
13271327 if node .convention == CONVENTION .fastcall :
1328- self .emit ( 'enter' , '__fastcall__' )
1328+ self .ic_enter ( '__fastcall__' )
13291329 else :
1330- self .emit ( 'enter' , node .locals_size )
1330+ self .ic_enter ( node .locals_size )
13311331
13321332 for local_var in node .local_symbol_table .values ():
13331333 if not local_var .accessed : # HINT: This should never happens as values() is already filtered
@@ -1347,23 +1347,22 @@ def visit_FUNCTION(self, node):
13471347 r = []
13481348 if local_var .default_value is not None :
13491349 r .extend (self .array_default_value (local_var .type_ , local_var .default_value ))
1350- self .emit ( 'larrd' , local_var .offset , q , local_var .size , r ) # Initializes array bounds
1350+ self .ic_larrd ( local_var .offset , q , local_var .size , r ) # Initializes array bounds
13511351 elif local_var .class_ == CLASS .const :
13521352 continue
13531353 else : # Local vars always defaults to 0, so if 0 we do nothing
13541354 if local_var .default_value is not None and local_var .default_value != 0 :
13551355 if isinstance (local_var .default_value , symbols .CONST ) and \
13561356 local_var .default_value .token == 'CONST' :
1357- self .emit ('lvarx' , local_var .offset , self .TSUFFIX (local_var .type_ ),
1358- [self .traverse_const (local_var .default_value )])
1357+ self .ic_lvarx (local_var .type_ , local_var .offset , [self .traverse_const (local_var .default_value )])
13591358 else :
13601359 q = self .default_value (local_var .type_ , local_var .default_value )
1361- self .emit ( 'lvard' , local_var .offset , q )
1360+ self .ic_lvard ( local_var .offset , q )
13621361
13631362 for i in node .body :
13641363 yield i
13651364
1366- self .emit ( 'label' , '%s__leave' % node .mangled )
1365+ self .ic_label ( '%s__leave' % node .mangled )
13671366
13681367 # Now free any local string from memory.
13691368 preserve_hl = False
@@ -1374,57 +1373,53 @@ def visit_FUNCTION(self, node):
13741373 if scope == SCOPE .local or (scope == SCOPE .parameter and not local_var .byref ):
13751374 if not preserve_hl :
13761375 preserve_hl = True
1377- self .emit ( 'exchg' )
1376+ self .ic_exchg ( )
13781377
13791378 offset = - local_var .offset if scope == SCOPE .local else local_var .offset
1380- self .emit ( 'fploadstr' , local_var .t , offset )
1381- self .emit ( 'call' , '__MEM_FREE' , 0 )
1379+ self .ic_fpload ( TYPE . string , local_var .t , offset )
1380+ self .ic_call ( '__MEM_FREE' , 0 )
13821381 self .REQUIRES .add ('free.asm' )
13831382 elif local_var .class_ == CLASS .const :
13841383 continue
13851384 else : # This is an array of strings, we must free it unless it's a by_ref array
13861385 if scope == SCOPE .local or (scope == SCOPE .parameter and not local_var .byref ):
13871386 if not preserve_hl :
13881387 preserve_hl = True
1389- self .emit ( 'exchg' )
1388+ self .ic_exchg ( )
13901389
1391- self .emit ( 'param' + self . TSUFFIX ( gl .BOUND_TYPE ) , local_var .count )
1390+ self .ic_param ( gl .BOUND_TYPE , local_var .count )
13921391 t2 = optemps .new_t ()
13931392 if scope == SCOPE .parameter :
1394- self .emit ('pload%s' % self .TSUFFIX (gl .PTR_TYPE ), t2 ,
1395- '%i' % (local_var .offset - self .TYPE (gl .PTR_TYPE ).size ))
1393+ self .ic_pload (gl .PTR_TYPE , t2 , '%i' % (local_var .offset - self .TYPE (gl .PTR_TYPE ).size ))
13961394 elif scope == SCOPE .local :
1397- self .emit ('pload%s' % self .TSUFFIX (gl .PTR_TYPE ), t2 ,
1398- '%i' % - (local_var .offset - self .TYPE (gl .PTR_TYPE ).size ))
1399- self .emit ('fparam' + self .TSUFFIX (gl .PTR_TYPE ), t2 )
1400- self .emit ('call' , '__ARRAYSTR_FREE_MEM' , 0 ) # frees all the strings and the array itself
1395+ self .ic_pload (gl .PTR_TYPE , t2 , '%i' % - (local_var .offset - self .TYPE (gl .PTR_TYPE ).size ))
1396+ self .ic_fparam (gl .PTR_TYPE , t2 )
1397+ self .ic_call ('__ARRAYSTR_FREE_MEM' , 0 )
14011398 self .REQUIRES .add ('arraystrfree.asm' )
14021399
14031400 if local_var .class_ == CLASS .array and local_var .type_ != self .TYPE (TYPE .string ) and \
14041401 (scope == SCOPE .local or (scope == SCOPE .parameter and not local_var .byref )):
14051402 if not preserve_hl :
14061403 preserve_hl = True
1407- self .emit ( 'exchg' )
1404+ self .ic_exchg ( )
14081405
14091406 t2 = optemps .new_t ()
14101407 if scope == SCOPE .parameter :
1411- self .emit ('pload%s' % self .TSUFFIX (gl .PTR_TYPE ), t2 , '%i'
1412- % (local_var .offset - self .TYPE (gl .PTR_TYPE ).size ))
1408+ self .ic_pload (gl .PTR_TYPE , t2 , '%i' % (local_var .offset - self .TYPE (gl .PTR_TYPE ).size ))
14131409 elif scope == SCOPE .local :
1414- self .emit ('pload%s' % self .TSUFFIX (gl .PTR_TYPE ), t2 , '%i'
1415- % - (local_var .offset - self .TYPE (gl .PTR_TYPE ).size ))
1410+ self .ic_pload (gl .PTR_TYPE , t2 , '%i' % - (local_var .offset - self .TYPE (gl .PTR_TYPE ).size ))
14161411
1417- self .emit ( 'fparam' + self . TSUFFIX ( gl .PTR_TYPE ) , t2 )
1418- self .emit ( 'call' , '__MEM_FREE' , 0 )
1412+ self .ic_fparam ( gl .PTR_TYPE , t2 )
1413+ self .ic_call ( '__MEM_FREE' , 0 )
14191414 self .REQUIRES .add ('free.asm' )
14201415
14211416 if preserve_hl :
1422- self .emit ( 'exchg' )
1417+ self .ic_exchg ( )
14231418
14241419 if node .convention == CONVENTION .fastcall :
1425- self .emit ( 'leave' , CONVENTION .to_string (node .convention ))
1420+ self .ic_leave ( CONVENTION .to_string (node .convention ))
14261421 else :
1427- self .emit ( 'leave' , node .params .size )
1422+ self .ic_leave ( node .params .size )
14281423
14291424 def visit_FUNCDECL (self , node ):
14301425 """ Nested scope functions
0 commit comments