|
|
@@ -1281,6 +1281,7 @@ PROCEDURE AppendArgL (val: ARRAY OF CHAR; ft: SymTab.TypeIndex;
|
|
|
PROCEDURE LowerCall (n: AST.Node; VAR t: SymTab.TypeIndex;
|
|
|
VAR q: QbeGen.QVal; want: BOOLEAN);
|
|
|
VAR nm, pn, cqn, cm: SymTab.Name;
|
|
|
+ ln: SymTab.LinkName;
|
|
|
i, ai: CARDINAL; at, ft, res: SymTab.TypeIndex;
|
|
|
qa, qt, qe, mg, qres, qb, qn: QbeGen.QVal;
|
|
|
conv, isV, qual, ind, isC, va, cabi: BOOLEAN;
|
|
|
@@ -1313,7 +1314,7 @@ PROCEDURE LowerCall (n: AST.Node; VAR t: SymTab.TypeIndex;
|
|
|
the exact proc entry by the alias's uid. *)
|
|
|
pi := FindProcByUid(qualUid);
|
|
|
IF ProcInfoIdx(pi, uid, res, depth, ext, np) THEN
|
|
|
- IF ext THEN QbeGen.CopyOp(nm, mg) ELSE QbeGen.Mangled(nm, uid, mg) END;
|
|
|
+ QbeGen.Mangled(nm, uid, mg);
|
|
|
QbeGen.CallBegin(mg, res, depth, ext)
|
|
|
ELSE
|
|
|
res := SymTab.InvalidType;
|
|
|
@@ -1332,14 +1333,9 @@ PROCEDURE LowerCall (n: AST.Node; VAR t: SymTab.TypeIndex;
|
|
|
QbeGen.CallBeginInd(qa, res, FALSE)
|
|
|
ELSIF ProcInfo(nm, uid, res, depth, ext, np) THEN
|
|
|
pi := FindProc(nm);
|
|
|
- IF ext THEN
|
|
|
- (* External callee: bind to its C link name (the procedure's
|
|
|
- own name); SymTab.ProcLink cannot be consulted after
|
|
|
- EndUnit. *)
|
|
|
- QbeGen.CopyOp(nm, mg)
|
|
|
- ELSE
|
|
|
- QbeGen.Mangled(nm, uid, mg)
|
|
|
- END;
|
|
|
+ (* Mangled resolves an explicit external link name by uid, then
|
|
|
+ falls back to the module-qualified internal symbol. *)
|
|
|
+ QbeGen.Mangled(nm, uid, mg);
|
|
|
QbeGen.CallBegin(mg, res, depth, ext)
|
|
|
ELSE
|
|
|
(* not in Lower's table: a predef C proc (SYSTEM.TRANSFER,
|
|
|
@@ -1348,8 +1344,8 @@ PROCEDURE LowerCall (n: AST.Node; VAR t: SymTab.TypeIndex;
|
|
|
isC := TRUE;
|
|
|
res := SymTab.ProcRes(nm);
|
|
|
np := SymTab.ProcNPar(nm);
|
|
|
- IF SymTab.ProcLink(nm, pn) THEN
|
|
|
- QbeGen.CallBegin(pn, res, 0, TRUE)
|
|
|
+ IF SymTab.ProcLink(nm, ln) THEN
|
|
|
+ QbeGen.CallBegin(ln, res, 0, TRUE)
|
|
|
ELSE
|
|
|
QbeGen.CallBegin(nm, res, 0, FALSE)
|
|
|
END
|
|
|
@@ -1607,7 +1603,7 @@ PROCEDURE LowerProcAddr (nm: ARRAY OF CHAR; VAR q: QbeGen.QVal);
|
|
|
END
|
|
|
END;
|
|
|
IF ok THEN
|
|
|
- IF ext THEN QbeGen.CopyOp(nm, mg) ELSE QbeGen.Mangled(nm, uid, mg) END;
|
|
|
+ QbeGen.Mangled(nm, uid, mg);
|
|
|
QbeGen.ProcAddr(mg, q)
|
|
|
ELSE QbeGen.CopyOp("0", q)
|
|
|
END
|