aboutsummaryrefslogtreecommitdiffhomepage
path: root/parse.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2023-06-05 10:59:44 +0200
committerlemon <lsof@mailbox.org>2023-06-05 10:59:44 +0200
commitd8ba699bae286cb29a6a965ee204804649f0bbc8 (patch)
treee39f855157b1b7ec592ad19407f83865fba1fea2 /parse.c
parented47a54958f5bd48dc364d4a0f77f778768696bb (diff)
style
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/parse.c b/parse.c
index 0dd984d..4fb44ec 100644
--- a/parse.c
+++ b/parse.c
@@ -1118,9 +1118,9 @@ cvt(struct function *fn, enum typetag to, enum typetag from, union ref ref)
if (from == TYBOOL) return ref;
if (ref.t == RTMP)
/* these instrs already have output range of [0,1] */
- if (instrtab[ref.idx].op == Onot || oiscmp(instrtab[ref.idx].op))
+ if (instrtab[ref.i].op == Onot || oiscmp(instrtab[ref.i].op))
return ref;
- ins.op = Oneq, ins.r = mkzerocon();
+ ins.op = Oneq, ins.r = ZEROREF;
}
else if (kfrom == KI4 && issignedt(from)) ins.op = Oexts4;
else if (kfrom == KI4) ins.op = Oextu4;
@@ -1761,7 +1761,7 @@ block(struct parser *pr, struct function *fn)
goto Err;
}
EMITS {
- decl.id = addinstr(fn, mkalloca(typesize(decl.ty), typealign(decl.ty))).idx;
+ decl.id = addinstr(fn, mkalloca(typesize(decl.ty), typealign(decl.ty))).i;
}
if (st.varini) {
putdecl(pr, &decl);
@@ -1811,10 +1811,10 @@ function(struct parser *pr, struct function *fn, const char **pnames, const stru
.name = pnames[i], .scls = SCAUTO, .span = pspans[i] };
EMITS {
if (isscalar(arg.ty)) {
- arg.id = addinstr(fn, mkalloca(typesize(arg.ty), typealign(arg.ty))).idx;
+ arg.id = addinstr(fn, mkalloca(typesize(arg.ty), typealign(arg.ty))).i;
genstore(fn, arg.ty, mkref(RTMP, arg.id), mkref(RPARAM, i));
} else {
- arg.id = addinstr(fn, mkinstr(Ocopy, KPTR, mkref(RPARAM, i))).idx;
+ arg.id = addinstr(fn, mkinstr(Ocopy, KPTR, mkref(RPARAM, i))).i;
}
}
putdecl(pr, &arg);
@@ -1831,10 +1831,15 @@ function(struct parser *pr, struct function *fn, const char **pnames, const stru
block(pr, fn);
envup(pr);
if (fn->curblk) {
- if (fn->retty.t != TYVOID && !nerror) {
- warn(&pr->fnblkspan, "non-void function may not return a value");
+ if (!strcmp(fn->name, "main") && fn->retty.t == TYINT) {
+ /* implicit return 0 for main function */
+ putreturn(fn, ZEROREF, NOREF);
+ } else {
+ if (fn->retty.t != TYVOID && !nerror) {
+ warn(&pr->fnblkspan, "non-void function may not return a value");
+ }
+ putreturn(fn, NOREF, NOREF);
}
- putreturn(fn, NOREF, NOREF);
}
}