Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a01a5db authored by Jack Palevich's avatar Jack Palevich
Browse files

Handle functions with anonymous arguments

Example:

int f(int a, int, int c) {
    return a + c;
}
parent 761aeb43
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -4891,11 +4891,15 @@ class Compiler : public ErrorSink {
                    int argCount = 0;
                    for (Type* pP = pDecl->pTail; pP; pP = pP->pTail) {
                        Type* pArg = pP->pHead;
                        if (pArg->id) {
                            addLocalSymbol(pArg);
                        }
                        /* read param name and compute offset */
                        size_t alignment = pGen->stackAlignmentOf(pArg);
                        a = (a + alignment - 1) & ~ (alignment-1);
                        if (pArg->id) {
                            VI(pArg->id)->pAddress = (void*) a;
                        }
                        a = a + pGen->stackSizeOf(pArg);
                        argCount++;
                    }
+8 −0
Original line number Diff line number Diff line
int f(int a,int, int c) {
    return a + c;
}

int main() {
    return f(1,2,3);
}
+5 −0
Original line number Diff line number Diff line
@@ -437,6 +437,11 @@ result: 0
    def testDefines(self):
        self.compileCheck(["-R", "data/defines.c"], """Executing compiled code:
result: 3
""","""""")

    def testFuncArgs(self):
        self.compileCheck(["-R", "data/funcargs.c"], """Executing compiled code:
result: 4
""","""""")

def main():