From c4a2620e2925516929cccbe3be532561d282cde7 Mon Sep 17 00:00:00 2001 From: acqn Date: Mon, 8 Feb 2021 22:47:51 +0800 Subject: [PATCH] Added an utility function to check for quasi-constant addresses (of stack variables). --- src/cc65/exprdesc.c | 9 +++++++++ src/cc65/exprdesc.h | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index f5d8cd779..aa98e1531 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -408,6 +408,15 @@ int ED_IsConst (const ExprDesc* Expr) +int ED_IsQuasiConst (const ExprDesc* Expr) +/* Return true if the expression denotes a quasi-constant of some sort. This +** can be a numeric constant, a constant address or a stack variable address. +*/ +{ + return (Expr->Flags & E_MASK_LOC) == E_LOC_NONE || ED_IsQuasiConstAddr (Expr); +} + + int ED_IsConstAddr (const ExprDesc* Expr) /* Return true if the expression denotes a constant address of some sort. This ** can be the address of a global variable (maybe with offset) or similar. diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index e1bf3117f..844af1566 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -649,6 +649,11 @@ int ED_IsConst (const ExprDesc* Expr); ** similar. */ +int ED_IsQuasiConst (const ExprDesc* Expr); +/* Return true if the expression denotes a quasi-constant of some sort. This +** can be a numeric constant, a constant address or a stack variable address. +*/ + int ED_IsConstAddr (const ExprDesc* Expr); /* Return true if the expression denotes a constant address of some sort. This ** can be the address of a global variable (maybe with offset) or similar.