forked from cosmonaut/wraith-lang
codegen fixes
parent
459a1dd3b7
commit
876e8deb6e
|
@ -54,6 +54,8 @@ struct Program
|
||||||
myStruct.myInt = 4;
|
myStruct.myInt = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
return myStruct.myInt;
|
Console.PrintLine("%i", myStruct.myInt);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -509,7 +509,7 @@ static LLVMValueRef CompileFunctionCallExpression(
|
||||||
if (functionCallExpression->functionCallExpression.identifier->syntaxKind == AccessExpression)
|
if (functionCallExpression->functionCallExpression.identifier->syntaxKind == AccessExpression)
|
||||||
{
|
{
|
||||||
LLVMTypeRef typeReference = FindStructType(
|
LLVMTypeRef typeReference = FindStructType(
|
||||||
functionCallExpression->functionCallExpression.identifier->identifier.name
|
functionCallExpression->functionCallExpression.identifier->accessExpression.accessee->identifier.name
|
||||||
);
|
);
|
||||||
|
|
||||||
if (typeReference != NULL)
|
if (typeReference != NULL)
|
||||||
|
@ -708,7 +708,7 @@ static LLVMBasicBlockRef CompileIfElseStatement(LLVMBuilderRef builder, LLVMValu
|
||||||
|
|
||||||
for (i = 0; i < ifElseStatement->ifElseStatement.ifStatement->ifStatement.statementSequence->statementSequence.count; i += 1)
|
for (i = 0; i < ifElseStatement->ifElseStatement.ifStatement->ifStatement.statementSequence->statementSequence.count; i += 1)
|
||||||
{
|
{
|
||||||
CompileStatement(builder, function, ifElseStatement->ifStatement.statementSequence->statementSequence.sequence[i]);
|
CompileStatement(builder, function, ifElseStatement->ifElseStatement.ifStatement->ifStatement.statementSequence->statementSequence.sequence[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
LLVMBuildBr(builder, afterCond);
|
LLVMBuildBr(builder, afterCond);
|
||||||
|
@ -900,13 +900,13 @@ static void CompileFunction(
|
||||||
|
|
||||||
for (i = 0; i < functionSignature->functionSignature.arguments->functionSignatureArguments.count; i += 1)
|
for (i = 0; i < functionSignature->functionSignature.arguments->functionSignatureArguments.count; i += 1)
|
||||||
{
|
{
|
||||||
char *ptrName = strdup(functionSignature->functionSignature.arguments->functionSignatureArguments.sequence[i]->identifier.name);
|
char *ptrName = strdup(functionSignature->functionSignature.arguments->functionSignatureArguments.sequence[i]->declaration.identifier->identifier.name);
|
||||||
strcat(ptrName, "_ptr");
|
strcat(ptrName, "_ptr");
|
||||||
LLVMValueRef argument = LLVMGetParam(function, i + !isStatic);
|
LLVMValueRef argument = LLVMGetParam(function, i + !isStatic);
|
||||||
LLVMValueRef argumentCopy = LLVMBuildAlloca(builder, LLVMTypeOf(argument), ptrName);
|
LLVMValueRef argumentCopy = LLVMBuildAlloca(builder, LLVMTypeOf(argument), ptrName);
|
||||||
LLVMBuildStore(builder, argument, argumentCopy);
|
LLVMBuildStore(builder, argument, argumentCopy);
|
||||||
free(ptrName);
|
free(ptrName);
|
||||||
AddLocalVariable(scope, argumentCopy, NULL, functionSignature->functionSignature.arguments->functionSignatureArguments.sequence[i]->identifier.name);
|
AddLocalVariable(scope, argumentCopy, NULL, functionSignature->functionSignature.arguments->functionSignatureArguments.sequence[i]->declaration.identifier->identifier.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < functionBody->statementSequence.count; i += 1)
|
for (i = 0; i < functionBody->statementSequence.count; i += 1)
|
||||||
|
|
Loading…
Reference in New Issue