forked from cosmonaut/wraith-lang
fix function argument + add _ptr suffix
parent
c6507fdcb7
commit
26ffaf45d4
22
compiler.c
22
compiler.c
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue