Skip to content

Commit 38e08c1

Browse files
committed
allow @@@ on namespaced labels
1 parent 0c5ef6e commit 38e08c1

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

expr.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2030,23 +2030,24 @@ EvalExpr(AST *expr, unsigned flags, int *valid, int depth)
20302030
offset = rval.val;
20312031
typ = rval.type;
20322032
}
2033-
if (expr->kind != AST_IDENTIFIER && expr->kind != AST_SYMBOL && expr->kind != AST_LOCAL_IDENTIFIER) {
2034-
if (reportError)
2035-
ERROR(expr, "Only addresses of identifiers allowed");
2036-
else
2037-
*valid = 0;
2038-
return intExpr(0);
2039-
}
20402033
if (expr->kind == AST_SYMBOL) {
20412034
sym = (Symbol *)expr->d.ptr;
20422035
name = sym->user_name;
20432036
} else if (expr->kind == AST_LOCAL_IDENTIFIER) {
20442037
sym = LookupSymbol(expr->left->d.string);
20452038
name = expr->right->d.string;
2046-
} else {
2039+
} else if (IsIdentifier(expr)) {
20472040
name = expr->d.string;
20482041
sym = LookupSymbol(name);
2049-
}
2042+
} else if (expr->kind == AST_CONSTREF || expr->kind == AST_METHODREF) {
2043+
sym = LookupMethodRef(expr, NULL, valid);
2044+
} else {
2045+
if (reportError)
2046+
ERROR(expr, "Only addresses of identifiers allowed");
2047+
else
2048+
*valid = 0;
2049+
return intExpr(0);
2050+
}
20502051
if (sym && sym->kind == SYM_LABEL) {
20512052
Label *lref = (Label *)sym->v.ptr;
20522053
if (0 == (lref->flags & LABEL_IN_HUB)) {

0 commit comments

Comments
 (0)