projects
/
inform.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update to commit e33eef4f8fab800eaf4a32b2d159cde6c4bbb38e
[inform.git]
/
src
/
directs.c
diff --git
a/src/directs.c
b/src/directs.c
index 5df6b0b666f6a4249a0a29966205ec4194f48523..15831728118b840102d401f7f67b7619c996a21e 100644
(file)
--- a/
src/directs.c
+++ b/
src/directs.c
@@
-34,7
+34,8
@@
brief_location routine_starts_line; /* Source code location where the current
static int constant_made_yet; /* Have any constants been defined yet? */
static int constant_made_yet; /* Have any constants been defined yet? */
-static int ifdef_stack[32], ifdef_sp;
+#define MAX_IFDEF_STACK (32)
+static int ifdef_stack[MAX_IFDEF_STACK], ifdef_sp;
/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */
@@
-315,7
+316,7
@@
Fake_Action directives to a point after the inclusion of \"Parser\".)");
assembly_operand AO;
put_token_back();
AO = parse_expression(CONSTANT_CONTEXT);
assembly_operand AO;
put_token_back();
AO = parse_expression(CONSTANT_CONTEXT);
- if (
module_switch && (AO.marker != 0)
)
+ if (
AO.marker != 0
)
error("A definite value must be given as a Dictionary flag");
else
val1 = AO.value;
error("A definite value must be given as a Dictionary flag");
else
val1 = AO.value;
@@
-328,7
+329,7
@@
Fake_Action directives to a point after the inclusion of \"Parser\".)");
assembly_operand AO;
put_token_back();
AO = parse_expression(CONSTANT_CONTEXT);
assembly_operand AO;
put_token_back();
AO = parse_expression(CONSTANT_CONTEXT);
- if (
module_switch && (AO.marker != 0)
)
+ if (
AO.marker != 0
)
error("A definite value must be given as a Dictionary flag");
else
val3 = AO.value;
error("A definite value must be given as a Dictionary flag");
else
val3 = AO.value;
@@
-472,7
+473,7
@@
Fake_Action directives to a point after the inclusion of \"Parser\".)");
case IFTRUE_CODE:
{ assembly_operand AO;
AO = parse_expression(CONSTANT_CONTEXT);
case IFTRUE_CODE:
{ assembly_operand AO;
AO = parse_expression(CONSTANT_CONTEXT);
- if (
module_switch && (AO.marker != 0)
)
+ if (
AO.marker != 0
)
{ error("This condition can't be determined");
flag = 0;
}
{ error("This condition can't be determined");
flag = 0;
}
@@
-483,7
+484,7
@@
Fake_Action directives to a point after the inclusion of \"Parser\".)");
case IFFALSE_CODE:
{ assembly_operand AO;
AO = parse_expression(CONSTANT_CONTEXT);
case IFFALSE_CODE:
{ assembly_operand AO;
AO = parse_expression(CONSTANT_CONTEXT);
- if (
module_switch && (AO.marker != 0)
)
+ if (
AO.marker != 0
)
{ error("This condition can't be determined");
flag = 1;
}
{ error("This condition can't be determined");
flag = 1;
}
@@
-496,6
+497,11
@@
Fake_Action directives to a point after the inclusion of \"Parser\".)");
if (!((token_type == SEP_TT) && (token_value == SEMICOLON_SEP)))
return ebf_error_recover("semicolon after 'If...' condition", token_text);
if (!((token_type == SEP_TT) && (token_value == SEMICOLON_SEP)))
return ebf_error_recover("semicolon after 'If...' condition", token_text);
+ if (ifdef_sp >= MAX_IFDEF_STACK) {
+ error("'If' directives nested too deeply");
+ panic_mode_error_recovery(); return FALSE;
+ }
+
if (flag)
{ ifdef_stack[ifdef_sp++] = TRUE; return FALSE; }
else
if (flag)
{ ifdef_stack[ifdef_sp++] = TRUE; return FALSE; }
else
@@
-621,7
+627,7
@@
Fake_Action directives to a point after the inclusion of \"Parser\".)");
if (token_type != DQ_TT)
return ebf_error_recover("literal string in double-quotes", token_text);
if (token_type != DQ_TT)
return ebf_error_recover("literal string in double-quotes", token_text);
- assign_symbol(i, compile_string(token_text,
TRUE, TRUE
), CONSTANT_T);
+ assign_symbol(i, compile_string(token_text,
STRCTX_LOWSTRING
), CONSTANT_T);
break;
/* --------------------------------------------------------------------- */
break;
/* --------------------------------------------------------------------- */
@@
-767,7
+773,7
@@
Fake_Action directives to a point after the inclusion of \"Parser\".)");
case RELEASE_CODE:
{ assembly_operand AO;
AO = parse_expression(CONSTANT_CONTEXT);
case RELEASE_CODE:
{ assembly_operand AO;
AO = parse_expression(CONSTANT_CONTEXT);
- if (
module_switch && (AO.marker != 0)
)
+ if (
AO.marker != 0
)
error("A definite value must be given as release number");
else
release_number = AO.value;
error("A definite value must be given as release number");
else
release_number = AO.value;
@@
-1081,7
+1087,7
@@
the first constant definition");
break;
}
break;
}
- if (
module_switch && (AO.marker != 0)
)
+ if (
AO.marker != 0
)
error("A definite value must be given as version number");
else
if (glulx_mode)
error("A definite value must be given as version number");
else
if (glulx_mode)