...
This commit is contained in:
@@ -1,5 +1,16 @@
|
|||||||
import c;
|
import c;
|
||||||
|
|
||||||
|
struct Human {
|
||||||
|
age: i64;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
global func main() {
|
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);
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user