This commit is contained in:
nub31
2025-05-12 21:46:45 +02:00
parent 90ef9fb8e8
commit 0a9442c044
2 changed files with 78 additions and 49 deletions

View File

@@ -1,5 +1,16 @@
import c;
struct Human {
age: i64;
name: string;
}
global func main() {
printf("something %s\n", "your mom");
me = new Human
{
age = 21;
name = "Oliver";
};
printf("My name is %s and i am %d years old\n", me.name, me.age);
}

View File

@@ -42,66 +42,84 @@ public class Generator
return _builder.ToString();
}
private string QbeTypeName(NubType type)
private static string QbeTypeName(NubType type)
{
if (type is NubPrimitiveType primitiveType)
switch (type)
{
switch (primitiveType.Kind)
case NubPrimitiveType primitiveType:
{
case PrimitiveTypeKind.I64:
case PrimitiveTypeKind.U64:
case PrimitiveTypeKind.String:
case PrimitiveTypeKind.Any:
return "l";
case PrimitiveTypeKind.I32:
case PrimitiveTypeKind.U32:
case PrimitiveTypeKind.I16:
case PrimitiveTypeKind.U16:
case PrimitiveTypeKind.I8:
case PrimitiveTypeKind.U8:
case PrimitiveTypeKind.Bool:
return "w";
case PrimitiveTypeKind.F64:
return "d";
case PrimitiveTypeKind.F32:
return "s";
default:
throw new ArgumentOutOfRangeException();
switch (primitiveType.Kind)
{
case PrimitiveTypeKind.I64:
case PrimitiveTypeKind.U64:
case PrimitiveTypeKind.String:
case PrimitiveTypeKind.Any:
return "l";
case PrimitiveTypeKind.I32:
case PrimitiveTypeKind.U32:
case PrimitiveTypeKind.I16:
case PrimitiveTypeKind.U16:
case PrimitiveTypeKind.I8:
case PrimitiveTypeKind.U8:
case PrimitiveTypeKind.Bool:
return "w";
case PrimitiveTypeKind.F64:
return "d";
case PrimitiveTypeKind.F32:
return "s";
default:
throw new ArgumentOutOfRangeException();
}
}
case NubCustomType nubCustomType:
{
return "l";
}
default:
{
throw new NotImplementedException();
}
}
throw new NotImplementedException();
}
private int QbeTypeSize(NubType type)
private static int QbeTypeSize(NubType type)
{
if (type is NubPrimitiveType primitiveType)
switch (type)
{
switch (primitiveType.Kind)
case NubPrimitiveType primitiveType:
{
case PrimitiveTypeKind.I64:
case PrimitiveTypeKind.U64:
case PrimitiveTypeKind.String:
case PrimitiveTypeKind.Any:
return 8;
case PrimitiveTypeKind.I32:
case PrimitiveTypeKind.U32:
case PrimitiveTypeKind.I16:
case PrimitiveTypeKind.U16:
case PrimitiveTypeKind.I8:
case PrimitiveTypeKind.U8:
case PrimitiveTypeKind.Bool:
return 4;
case PrimitiveTypeKind.F64:
return 8;
case PrimitiveTypeKind.F32:
return 4;
default:
throw new ArgumentOutOfRangeException();
switch (primitiveType.Kind)
{
case PrimitiveTypeKind.I64:
case PrimitiveTypeKind.U64:
case PrimitiveTypeKind.String:
case PrimitiveTypeKind.Any:
return 8;
case PrimitiveTypeKind.I32:
case PrimitiveTypeKind.U32:
case PrimitiveTypeKind.I16:
case PrimitiveTypeKind.U16:
case PrimitiveTypeKind.I8:
case PrimitiveTypeKind.U8:
case PrimitiveTypeKind.Bool:
return 4;
case PrimitiveTypeKind.F64:
return 8;
case PrimitiveTypeKind.F32:
return 4;
default:
throw new ArgumentOutOfRangeException();
}
}
case NubCustomType nubCustomType:
{
return 8;
}
default:
{
throw new NotImplementedException();
}
}
throw new NotImplementedException();
}
private void GenerateFuncDefinition(LocalFuncDefinitionNode node)