[codegen] Add static storage class to global variables for size optimization

This commit is contained in:
J. Nick Koston
2025-12-21 17:20:01 -10:00
parent 39926909af
commit 57baf7ac7b
3 changed files with 13 additions and 8 deletions

View File

@@ -337,7 +337,7 @@ def lv_Pvariable(type, name) -> MockObj:
"""
if isinstance(name, str):
name = ID(name, True, type)
decl = VariableDeclarationExpression(type, "*", name)
decl = VariableDeclarationExpression(type, "*", name, storage_class="static")
CORE.add_global(decl)
var = MockObj(name, "->")
CORE.register_variable(name, var)
@@ -353,7 +353,7 @@ def lv_variable(type, name) -> MockObj:
"""
if isinstance(name, str):
name = ID(name, True, type)
decl = VariableDeclarationExpression(type, "", name)
decl = VariableDeclarationExpression(type, "", name, storage_class="static")
CORE.add_global(decl)
var = MockObj(name, ".")
CORE.register_variable(name, var)

View File

@@ -133,7 +133,7 @@ async def to_code(config):
value_type,
)
var = MockObj(varid, ".")
decl = VariableDeclarationExpression(varid.type, "", varid)
decl = VariableDeclarationExpression(varid.type, "", varid, storage_class="static")
add_global(decl)
CORE.register_variable(varid, var)

View File

@@ -51,14 +51,19 @@ class AssignmentExpression(Expression):
class VariableDeclarationExpression(Expression):
__slots__ = ("type", "modifier", "name")
__slots__ = ("type", "modifier", "name", "storage_class")
def __init__(self, type_, modifier, name):
def __init__(
self, type_: "MockObj", modifier: str, name: ID, storage_class: str = ""
) -> None:
self.type = type_
self.modifier = modifier
self.name = name
self.storage_class = storage_class
def __str__(self):
def __str__(self) -> str:
if self.storage_class:
return f"{self.storage_class} {self.type} {self.modifier}{self.name}"
return f"{self.type} {self.modifier}{self.name}"
@@ -522,7 +527,7 @@ def new_variable(id_: ID, rhs: SafeExpType, type_: "MockObj" = None) -> "MockObj
obj = MockObj(id_, ".")
if type_ is not None:
id_.type = type_
decl = VariableDeclarationExpression(id_.type, "", id_)
decl = VariableDeclarationExpression(id_.type, "", id_, storage_class="static")
CORE.add_global(decl)
assignment = AssignmentExpression(None, "", id_, rhs)
CORE.add(assignment)
@@ -544,7 +549,7 @@ def Pvariable(id_: ID, rhs: SafeExpType, type_: "MockObj" = None) -> "MockObj":
obj = MockObj(id_, "->")
if type_ is not None:
id_.type = type_
decl = VariableDeclarationExpression(id_.type, "*", id_)
decl = VariableDeclarationExpression(id_.type, "*", id_, storage_class="static")
CORE.add_global(decl)
assignment = AssignmentExpression(None, None, id_, rhs)
CORE.add(assignment)