|
@@ -802,15 +802,21 @@ unit pexpr;
|
|
syssym : p1:=statement_syssym(psyssym(srsym)^.number,pd);
|
|
syssym : p1:=statement_syssym(psyssym(srsym)^.number,pd);
|
|
typesym : begin
|
|
typesym : begin
|
|
pd:=ptypesym(srsym)^.definition;
|
|
pd:=ptypesym(srsym)^.definition;
|
|
|
|
+ if not assigned(pd) then
|
|
|
|
+ begin
|
|
|
|
+ pd:=generrordef;
|
|
|
|
+ again:=false;
|
|
|
|
+ end
|
|
|
|
+ else
|
|
{ if we read a type declaration }
|
|
{ if we read a type declaration }
|
|
{ we have to return the type and }
|
|
{ we have to return the type and }
|
|
{ nothing else }
|
|
{ nothing else }
|
|
- if block_type=bt_type then
|
|
|
|
- begin
|
|
|
|
- p1:=genzeronode(typen);
|
|
|
|
- p1^.resulttype:=pd;
|
|
|
|
- pd:=voiddef;
|
|
|
|
- end
|
|
|
|
|
|
+ if block_type=bt_type then
|
|
|
|
+ begin
|
|
|
|
+ p1:=genzeronode(typen);
|
|
|
|
+ p1^.resulttype:=pd;
|
|
|
|
+ pd:=voiddef;
|
|
|
|
+ end
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
if token=LKLAMMER then
|
|
if token=LKLAMMER then
|
|
@@ -1043,6 +1049,9 @@ unit pexpr;
|
|
check_tokenpos;
|
|
check_tokenpos;
|
|
while again do
|
|
while again do
|
|
begin
|
|
begin
|
|
|
|
+ { prevent crashes with unknown types }
|
|
|
|
+ if not assigned(pd) then
|
|
|
|
+ exit;
|
|
case token of
|
|
case token of
|
|
CARET : begin
|
|
CARET : begin
|
|
consume(CARET);
|
|
consume(CARET);
|
|
@@ -1263,6 +1272,7 @@ unit pexpr;
|
|
|
|
|
|
begin
|
|
begin
|
|
oldp1:=nil;
|
|
oldp1:=nil;
|
|
|
|
+ p1:=nil;
|
|
filepos:=tokenpos;
|
|
filepos:=tokenpos;
|
|
if token=ID then
|
|
if token=ID then
|
|
begin
|
|
begin
|
|
@@ -1538,6 +1548,9 @@ unit pexpr;
|
|
Message(cg_e_illegal_expression);
|
|
Message(cg_e_illegal_expression);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
+ { generate error node if no node is created }
|
|
|
|
+ if not assigned(p1) then
|
|
|
|
+ p1:=genzeronode(errorn);
|
|
factor:=p1;
|
|
factor:=p1;
|
|
check_tokenpos;
|
|
check_tokenpos;
|
|
end;
|
|
end;
|
|
@@ -1770,7 +1783,10 @@ unit pexpr;
|
|
end.
|
|
end.
|
|
{
|
|
{
|
|
$Log$
|
|
$Log$
|
|
- Revision 1.58 1998-09-30 07:40:35 florian
|
|
|
|
|
|
+ Revision 1.59 1998-10-01 14:56:24 peter
|
|
|
|
+ * crash preventions
|
|
|
|
+
|
|
|
|
+ Revision 1.58 1998/09/30 07:40:35 florian
|
|
* better error recovering
|
|
* better error recovering
|
|
|
|
|
|
Revision 1.57 1998/09/28 16:18:16 florian
|
|
Revision 1.57 1998/09/28 16:18:16 florian
|