fix function argument + add _ptr suffix

generics
cosmonaut 2021-04-21 21:38:58 -07:00
parent c6507fdcb7
commit 26ffaf45d4
1 changed files with 17 additions and 5 deletions

View File

@ -251,12 +251,15 @@ static void AddStructVariables(
{ {
for (j = 0; j < structTypeFieldDeclarations[i].fieldCount; j += 1) for (j = 0; j < structTypeFieldDeclarations[i].fieldCount; j += 1)
{ {
char *ptrName = strdup(structTypeFieldDeclarations[i].fields[j].name);
strcat(ptrName, "_ptr");
LLVMValueRef elementPointer = LLVMBuildStructGEP( LLVMValueRef elementPointer = LLVMBuildStructGEP(
builder, builder,
structPointer, structPointer,
structTypeFieldDeclarations[i].fields[j].index, structTypeFieldDeclarations[i].fields[j].index,
structTypeFieldDeclarations[i].fields[j].name ptrName
); );
free(ptrName);
AddLocalVariable( AddLocalVariable(
scope, scope,
@ -466,18 +469,23 @@ static void CompileAssignment(LLVMValueRef wStructValue, LLVMBuilderRef builder,
static void CompileFunctionVariableDeclaration(LLVMBuilderRef builder, Node *variableDeclaration) static void CompileFunctionVariableDeclaration(LLVMBuilderRef builder, Node *variableDeclaration)
{ {
char *variableName = variableDeclaration->children[1]->value.string;
LLVMValueRef variable; LLVMValueRef variable;
char *variableName = variableDeclaration->children[1]->value.string;
char *ptrName = strdup(variableName);
strcat(ptrName, "_ptr");
if (variableDeclaration->children[0]->type == CustomType) if (variableDeclaration->children[0]->type == CustomType)
{ {
char *customTypeName = variableDeclaration->children[0]->children[0]->value.string; char *customTypeName = variableDeclaration->children[0]->children[0]->value.string;
variable = LLVMBuildAlloca(builder, LookupCustomType(customTypeName), variableName); variable = LLVMBuildAlloca(builder, LookupCustomType(customTypeName), ptrName);
} }
else else
{ {
variable = LLVMBuildAlloca(builder, WraithTypeToLLVMType(variableDeclaration->children[0]->type), variableName); variable = LLVMBuildAlloca(builder, WraithTypeToLLVMType(variableDeclaration->children[0]->type), ptrName);
} }
free(ptrName);
AddLocalVariable(scope, variable, variableName); AddLocalVariable(scope, variable, variableName);
} }
@ -543,8 +551,12 @@ static void CompileFunction(
for (i = 0; i < functionSignature->children[2]->childCount; i += 1) for (i = 0; i < functionSignature->children[2]->childCount; i += 1)
{ {
char *ptrName = strdup(functionSignature->children[2]->children[i]->children[1]->value.string);
strcat(ptrName, "_ptr");
LLVMValueRef argument = LLVMGetParam(function, i + 1); LLVMValueRef argument = LLVMGetParam(function, i + 1);
LLVMValueRef argumentCopy = LLVMBuildAlloca(builder, LLVMTypeOf(argument), functionSignature->children[2]->children[i]->children[1]->value.string); LLVMValueRef argumentCopy = LLVMBuildAlloca(builder, LLVMTypeOf(argument), ptrName);
LLVMBuildStore(builder, argument, argumentCopy);
free(ptrName);
AddLocalVariable(scope, argumentCopy, functionSignature->children[2]->children[i]->children[1]->value.string); AddLocalVariable(scope, argumentCopy, functionSignature->children[2]->children[i]->children[1]->value.string);
} }