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; import c;
global func main() { struct Human {
printf("something %s\n", "your mom"); age: i64;
name: string;
}
global func main() {
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(); 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: switch (primitiveType.Kind)
case PrimitiveTypeKind.U64: {
case PrimitiveTypeKind.String: case PrimitiveTypeKind.I64:
case PrimitiveTypeKind.Any: case PrimitiveTypeKind.U64:
return "l"; case PrimitiveTypeKind.String:
case PrimitiveTypeKind.I32: case PrimitiveTypeKind.Any:
case PrimitiveTypeKind.U32: return "l";
case PrimitiveTypeKind.I16: case PrimitiveTypeKind.I32:
case PrimitiveTypeKind.U16: case PrimitiveTypeKind.U32:
case PrimitiveTypeKind.I8: case PrimitiveTypeKind.I16:
case PrimitiveTypeKind.U8: case PrimitiveTypeKind.U16:
case PrimitiveTypeKind.Bool: case PrimitiveTypeKind.I8:
return "w"; case PrimitiveTypeKind.U8:
case PrimitiveTypeKind.F64: case PrimitiveTypeKind.Bool:
return "d"; return "w";
case PrimitiveTypeKind.F32: case PrimitiveTypeKind.F64:
return "s"; return "d";
default: case PrimitiveTypeKind.F32:
throw new ArgumentOutOfRangeException(); 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: switch (primitiveType.Kind)
case PrimitiveTypeKind.U64: {
case PrimitiveTypeKind.String: case PrimitiveTypeKind.I64:
case PrimitiveTypeKind.Any: case PrimitiveTypeKind.U64:
return 8; case PrimitiveTypeKind.String:
case PrimitiveTypeKind.I32: case PrimitiveTypeKind.Any:
case PrimitiveTypeKind.U32: return 8;
case PrimitiveTypeKind.I16: case PrimitiveTypeKind.I32:
case PrimitiveTypeKind.U16: case PrimitiveTypeKind.U32:
case PrimitiveTypeKind.I8: case PrimitiveTypeKind.I16:
case PrimitiveTypeKind.U8: case PrimitiveTypeKind.U16:
case PrimitiveTypeKind.Bool: case PrimitiveTypeKind.I8:
return 4; case PrimitiveTypeKind.U8:
case PrimitiveTypeKind.F64: case PrimitiveTypeKind.Bool:
return 8; return 4;
case PrimitiveTypeKind.F32: case PrimitiveTypeKind.F64:
return 4; return 8;
default: case PrimitiveTypeKind.F32:
throw new ArgumentOutOfRangeException(); return 4;
default:
throw new ArgumentOutOfRangeException();
}
}
case NubCustomType nubCustomType:
{
return 8;
}
default:
{
throw new NotImplementedException();
} }
} }
throw new NotImplementedException();
} }
private void GenerateFuncDefinition(LocalFuncDefinitionNode node) private void GenerateFuncDefinition(LocalFuncDefinitionNode node)