From 461205d60a2eaafaa44bd3d0c2a445f57714e31c Mon Sep 17 00:00:00 2001 From: Olaf Seibert Date: Wed, 21 Apr 2021 18:34:11 +0200 Subject: [PATCH] Make a nice flag name for evaluate(). --- TODO | 4 ++++ assemble.c | 4 ++-- extree.c | 36 ++++++++++++++++++------------------ extree.h | 3 ++- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/TODO b/TODO index 9a514ec..c94749a 100644 --- a/TODO +++ b/TODO @@ -4,6 +4,10 @@ listing format errors: ignore whitespace of input documentation: print supported directives +register symbols: %3+1 is the same as %4 (pdf page 3-9 aka 35), +but where precisely register symbols can be used, and how, +isn't specified. + --------------------------------------- I was not able to locate a Macro-11 language reference manual any more recent than for RT11 version *3*, so I used that plus my recollection diff --git a/assemble.c b/assemble.c index a667526..9490aa4 100644 --- a/assemble.c +++ b/assemble.c @@ -798,12 +798,12 @@ static int assemble( if (!label) { report(stack->top, "Missing .(I)IF condition\n"); } else if (strcmp(label, "DF") == 0) { - value = parse_expr(cp, 1); + value = parse_expr(cp, EVALUATE_UNDEF); cp = value->cp; ok = eval_defined(value); free_tree(value); } else if (strcmp(label, "NDF") == 0) { - value = parse_expr(cp, 1); + value = parse_expr(cp, EVALUATE_UNDEF); cp = value->cp; ok = eval_undefined(value); free_tree(value); diff --git a/extree.c b/extree.c index 1ac7494..39e605c 100644 --- a/extree.c +++ b/extree.c @@ -269,7 +269,7 @@ EX_TREE *dup_tree( constant value, else a symbol plus an offset. */ EX_TREE *evaluate( EX_TREE *tp, - int undef) + int flags) { EX_TREE *res; char *cp = tp->cp; @@ -281,7 +281,7 @@ EX_TREE *evaluate( /* Change some symbols to "undefined" */ - if (undef) { + if (flags & EVALUATE_UNDEF) { int change = 0; /* I'd prefer this behavior, but MACRO.SAV is a bit too primitive. */ @@ -338,7 +338,7 @@ EX_TREE *evaluate( case EX_COM: /* Complement */ - tp = evaluate(tp->data.child.left, undef); + tp = evaluate(tp->data.child.left, flags); if (tp->type == EX_LIT) { /* Complement the literal */ res = new_ex_lit(~tp->data.lit); @@ -354,7 +354,7 @@ EX_TREE *evaluate( break; case EX_NEG: - tp = evaluate(tp->data.child.left, undef); + tp = evaluate(tp->data.child.left, flags); if (tp->type == EX_LIT) { /* negate literal */ res = new_ex_lit((unsigned) -(int) tp->data.lit); @@ -387,8 +387,8 @@ EX_TREE *evaluate( EX_TREE *left, *right; - left = evaluate(tp->data.child.left, undef); - right = evaluate(tp->data.child.right, undef); + left = evaluate(tp->data.child.left, flags); + right = evaluate(tp->data.child.right, flags); /* Both literals? Sum them and return result. */ if (left->type == EX_LIT && right->type == EX_LIT) { @@ -463,8 +463,8 @@ EX_TREE *evaluate( EX_TREE *left, *right; - left = evaluate(tp->data.child.left, undef); - right = evaluate(tp->data.child.right, undef); + left = evaluate(tp->data.child.left, flags); + right = evaluate(tp->data.child.right, flags); /* Both literals? Subtract them and return a lit. */ if (left->type == EX_LIT && right->type == EX_LIT) { @@ -539,8 +539,8 @@ EX_TREE *evaluate( EX_TREE *left, *right; - left = evaluate(tp->data.child.left, undef); - right = evaluate(tp->data.child.right, undef); + left = evaluate(tp->data.child.left, flags); + right = evaluate(tp->data.child.right, flags); /* Can only multiply if both are literals */ if (left->type == EX_LIT && right->type == EX_LIT) { @@ -601,8 +601,8 @@ EX_TREE *evaluate( EX_TREE *left, *right; - left = evaluate(tp->data.child.left, undef); - right = evaluate(tp->data.child.right, undef); + left = evaluate(tp->data.child.left, flags); + right = evaluate(tp->data.child.right, flags); /* Can only divide if both are literals */ if (left->type == EX_LIT && right->type == EX_LIT) { @@ -629,8 +629,8 @@ EX_TREE *evaluate( EX_TREE *left, *right; - left = evaluate(tp->data.child.left, undef); - right = evaluate(tp->data.child.right, undef); + left = evaluate(tp->data.child.left, flags); + right = evaluate(tp->data.child.right, flags); /* Operate if both are literals */ if (left->type == EX_LIT && right->type == EX_LIT) { @@ -674,8 +674,8 @@ EX_TREE *evaluate( EX_TREE *left, *right; - left = evaluate(tp->data.child.left, undef); - right = evaluate(tp->data.child.right, undef); + left = evaluate(tp->data.child.left, flags); + right = evaluate(tp->data.child.right, flags); /* Operate if both are literals */ if (left->type == EX_LIT && right->type == EX_LIT) { @@ -719,8 +719,8 @@ EX_TREE *evaluate( EX_TREE *left, *right; - left = evaluate(tp->data.child.left, undef); - right = evaluate(tp->data.child.right, undef); + left = evaluate(tp->data.child.left, flags); + right = evaluate(tp->data.child.right, flags); /* Operate if both are literals */ if (left->type == EX_LIT && right->type == EX_LIT) { diff --git a/extree.h b/extree.h index 67ae797..5d91c60 100644 --- a/extree.h +++ b/extree.h @@ -67,7 +67,8 @@ EX_TREE *new_ex_bin( EX_TREE *evaluate( EX_TREE *tp, - int undef); + int flags); +#define EVALUATE_UNDEF 1 #endif