should fix type-bound procedure name mismatch between calls and definitions

This commit is contained in:
Norayr Chilingarian 2025-06-14 17:12:48 +04:00
parent 28c327be28
commit 2f1ce08aff

View file

@ -409,22 +409,24 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
BEGIN BEGIN
IF obj # NIL THEN IF obj # NIL THEN
DefineTProcMacros(obj^.left, empty); DefineTProcMacros(obj^.left, empty);
IF (obj^.mode = OPT.TProc) & (obj = BaseTProc(obj)) & ((OPM.currFile # OPM.HeaderFile) OR (obj^.vis = OPT.external)) THEN IF (obj^.mode = OPT.TProc) & (obj = BaseTProc(obj)) THEN
OPM.WriteString("#define __"); IF (OPM.currFile = OPM.BodyFile) OR ((OPM.currFile = OPM.HeaderFile) & (obj^.vis = OPT.external)) THEN
Ident(obj); OPM.WriteString("#define __");
DeclareParams(obj^.link, TRUE); Ident(obj);
OPM.WriteString(" __SEND("); DeclareParams(obj^.link, TRUE);
IF obj^.link^.typ^.form = OPT.Pointer THEN OPM.WriteString(" __SEND(");
OPM.WriteString("__TYPEOF("); Ident(obj^.link); OPM.Write(")") IF obj^.link^.typ^.form = OPT.Pointer THEN
ELSE Ident(obj^.link); OPM.WriteString(TagExt) OPM.WriteString("__TYPEOF("); Ident(obj^.link); OPM.Write(")")
END ; ELSE Ident(obj^.link); OPM.WriteString(TagExt)
Str1(", #, ", obj^.adr DIV 10000H); END ;
IF obj^.typ = OPT.notyp THEN OPM.WriteString('void') ELSE Ident(obj^.typ^.strobj) END ; Str1(", #, ", obj^.adr DIV 10000H);
OPM.WriteString("(*)"); IF obj^.typ = OPT.notyp THEN OPM.WriteString('void') ELSE Ident(obj^.typ^.strobj) END ;
AnsiParamList(obj^.link, FALSE); OPM.WriteString("(*)");
OPM.WriteString(", "); AnsiParamList(obj^.link, FALSE);
DeclareParams(obj^.link, TRUE); OPM.WriteString(", ");
OPM.Write(")"); OPM.WriteLn DeclareParams(obj^.link, TRUE);
OPM.Write(")"); OPM.WriteLn
END
END ; END ;
DefineTProcMacros(obj^.right, empty) DefineTProcMacros(obj^.right, empty)
END END
@ -433,7 +435,7 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
PROCEDURE DefineType(str: OPT.Struct); (* define a type object *) PROCEDURE DefineType(str: OPT.Struct); (* define a type object *)
VAR obj, field, par: OPT.Object; empty: BOOLEAN; VAR obj, field, par: OPT.Object; empty: BOOLEAN;
BEGIN BEGIN
IF (OPM.currFile = OPM.BodyFile) OR (str^.ref < OPM.MaxStruct (*for hidden exports*) ) THEN IF (OPM.currFile = OPM.BodyFile) OR (str^.ref < OPM.MaxStruct (*for hidden exports*) ) OR ((OPM.currFile = OPM.HeaderFile) & (str^.strobj # NIL) & (str^.strobj^.vis = OPT.external)) THEN
obj := str^.strobj; obj := str^.strobj;
IF (obj = NIL) OR Undefined(obj) THEN IF (obj = NIL) OR Undefined(obj) THEN
IF obj # NIL THEN (* check for cycles *) IF obj # NIL THEN (* check for cycles *)
@ -455,7 +457,7 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
ELSIF str^.comp IN {OPT.Array, OPT.DynArr} THEN ELSIF str^.comp IN {OPT.Array, OPT.DynArr} THEN
IF (str^.BaseTyp^.strobj # NIL) & (str^.BaseTyp^.strobj^.linkadr = ProcessingType) THEN (*cyclic base type*) IF (str^.BaseTyp^.strobj # NIL) & (str^.BaseTyp^.strobj^.linkadr = ProcessingType) THEN (*cyclic base type*)
OPM.Mark(244, str^ .txtpos); str^.BaseTyp^.strobj^.linkadr := PredefinedType OPM.Mark(244, str^ .txtpos); str^.BaseTyp^.strobj^.linkadr := PredefinedType
END ; END ;
DefineType(str^.BaseTyp) DefineType(str^.BaseTyp)
ELSIF str^.form = OPT.ProcTyp THEN ELSIF str^.form = OPT.ProcTyp THEN
IF str^.BaseTyp # OPT.notyp THEN DefineType(str^.BaseTyp) END ; IF str^.BaseTyp # OPT.notyp THEN DefineType(str^.BaseTyp) END ;
@ -475,6 +477,11 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
IF obj^.typ^.comp = OPT.Record THEN empty := TRUE; IF obj^.typ^.comp = OPT.Record THEN empty := TRUE;
DeclareTProcs(str^.link, empty); DefineTProcMacros(str^.link, empty); DeclareTProcs(str^.link, empty); DefineTProcMacros(str^.link, empty);
IF ~empty THEN OPM.WriteLn END IF ~empty THEN OPM.WriteLn END
ELSIF (obj^.typ^.form = OPT.Pointer) & (obj^.typ^.BaseTyp^.comp = OPT.Record) THEN
empty := TRUE;
DeclareTProcs(obj^.typ^.BaseTyp^.link, empty);
DefineTProcMacros(obj^.typ^.BaseTyp^.link, empty);
IF ~empty THEN OPM.WriteLn END
END END
END END
END END