This commit is contained in:
@@ -40247,8 +40247,10 @@ fn emitletdataw(c: *cgen, file: *node) void = {
|
||||
if (sz == 8 && !issg && fsz == 0 && !isarr8 && !istup && !istagged) {
|
||||
let v: u64 = 0u64;
|
||||
let ok: bool = true;
|
||||
let fnp: bool = false;
|
||||
let r: *node = nil;
|
||||
if (d.rhs != nil) {
|
||||
let r: *node = d.rhs;
|
||||
r = d.rhs;
|
||||
for (r != nil) {
|
||||
if (r.kind != nkind.N_CAST) { break; };
|
||||
r = r.lhs;
|
||||
@@ -40258,9 +40260,24 @@ fn emitletdataw(c: *cgen, file: *node) void = {
|
||||
// int leaf folds. `let x: i8 = -1i8;`
|
||||
// arrives as N_UN(TK_MINUS, N_INTLIT)
|
||||
// after the typed-AST cast peel.
|
||||
ok = foldintliteral(r, &v);
|
||||
// #119: a scalar `&fn` global — the &fn->DATAR
|
||||
// reloc (the #117 helper at its second consumer).
|
||||
if (nodefnptr(c, r)) { fnp = true; }
|
||||
else { ok = foldintliteral(r, &v); };
|
||||
};
|
||||
if (ok) {
|
||||
if (fnp) {
|
||||
emitline("DATAW ");
|
||||
emitsymnamehint(c, nm, d.nmod);
|
||||
emitline("(SB),\"");
|
||||
let zi: i32 = 0;
|
||||
for (zi < 8) { emitdatawbyte(0u8); zi += 1; };
|
||||
emitline("\"\n");
|
||||
emitline("DATAR ");
|
||||
emitsymnamehint(c, nm, d.nmod);
|
||||
emitline("+0(SB),");
|
||||
emitfnname(c, r.lhs.str, c.curmod);
|
||||
emitline("(SB)\n");
|
||||
} else if (ok) {
|
||||
emitline("DATAW ");
|
||||
emitsymnamehint(c, nm, d.nmod);
|
||||
emitline("(SB),\"");
|
||||
|
||||
@@ -2693,8 +2693,10 @@ fn emitletdataw(c: *cgen, file: *node) void = {
|
||||
if (sz == 8 && !issg && fsz == 0 && !isarr8 && !istup && !istagged) {
|
||||
let v: u64 = 0u64;
|
||||
let ok: bool = true;
|
||||
let fnp: bool = false;
|
||||
let r: *node = nil;
|
||||
if (d.rhs != nil) {
|
||||
let r: *node = d.rhs;
|
||||
r = d.rhs;
|
||||
for (r != nil) {
|
||||
if (r.kind != nkind.N_CAST) { break; };
|
||||
r = r.lhs;
|
||||
@@ -2704,9 +2706,24 @@ fn emitletdataw(c: *cgen, file: *node) void = {
|
||||
// int leaf folds. `let x: i8 = -1i8;`
|
||||
// arrives as N_UN(TK_MINUS, N_INTLIT)
|
||||
// after the typed-AST cast peel.
|
||||
ok = foldintliteral(r, &v);
|
||||
// #119: a scalar `&fn` global — the &fn->DATAR
|
||||
// reloc (the #117 helper at its second consumer).
|
||||
if (nodefnptr(c, r)) { fnp = true; }
|
||||
else { ok = foldintliteral(r, &v); };
|
||||
};
|
||||
if (ok) {
|
||||
if (fnp) {
|
||||
emitline("DATAW ");
|
||||
emitsymnamehint(c, nm, d.nmod);
|
||||
emitline("(SB),\"");
|
||||
let zi: i32 = 0;
|
||||
for (zi < 8) { emitdatawbyte(0u8); zi += 1; };
|
||||
emitline("\"\n");
|
||||
emitline("DATAR ");
|
||||
emitsymnamehint(c, nm, d.nmod);
|
||||
emitline("+0(SB),");
|
||||
emitfnname(c, r.lhs.str, c.curmod);
|
||||
emitline("(SB)\n");
|
||||
} else if (ok) {
|
||||
emitline("DATAW ");
|
||||
emitsymnamehint(c, nm, d.nmod);
|
||||
emitline("(SB),\"");
|
||||
|
||||
@@ -40247,8 +40247,10 @@ fn emitletdataw(c: *cgen, file: *node) void = {
|
||||
if (sz == 8 && !issg && fsz == 0 && !isarr8 && !istup && !istagged) {
|
||||
let v: u64 = 0u64;
|
||||
let ok: bool = true;
|
||||
let fnp: bool = false;
|
||||
let r: *node = nil;
|
||||
if (d.rhs != nil) {
|
||||
let r: *node = d.rhs;
|
||||
r = d.rhs;
|
||||
for (r != nil) {
|
||||
if (r.kind != nkind.N_CAST) { break; };
|
||||
r = r.lhs;
|
||||
@@ -40258,9 +40260,24 @@ fn emitletdataw(c: *cgen, file: *node) void = {
|
||||
// int leaf folds. `let x: i8 = -1i8;`
|
||||
// arrives as N_UN(TK_MINUS, N_INTLIT)
|
||||
// after the typed-AST cast peel.
|
||||
ok = foldintliteral(r, &v);
|
||||
// #119: a scalar `&fn` global — the &fn->DATAR
|
||||
// reloc (the #117 helper at its second consumer).
|
||||
if (nodefnptr(c, r)) { fnp = true; }
|
||||
else { ok = foldintliteral(r, &v); };
|
||||
};
|
||||
if (ok) {
|
||||
if (fnp) {
|
||||
emitline("DATAW ");
|
||||
emitsymnamehint(c, nm, d.nmod);
|
||||
emitline("(SB),\"");
|
||||
let zi: i32 = 0;
|
||||
for (zi < 8) { emitdatawbyte(0u8); zi += 1; };
|
||||
emitline("\"\n");
|
||||
emitline("DATAR ");
|
||||
emitsymnamehint(c, nm, d.nmod);
|
||||
emitline("+0(SB),");
|
||||
emitfnname(c, r.lhs.str, c.curmod);
|
||||
emitline("(SB)\n");
|
||||
} else if (ok) {
|
||||
emitline("DATAW ");
|
||||
emitsymnamehint(c, nm, d.nmod);
|
||||
emitline("(SB),\"");
|
||||
|
||||
Reference in New Issue
Block a user