171 lines
2.5 KiB
C++
171 lines
2.5 KiB
C++
Thing :: struct{
|
|
data: (U32) U32; // Function pointer
|
|
data: (U32) U32 @ [32]; // Array of function pointers
|
|
data: (U32) U32* @ [32]; // Array of function pointers, they return a pointer
|
|
|
|
actual_function :: (first: Thing*, last: Thing*, node: Thing*)/*no type == void*/{
|
|
if first == 0 {
|
|
first = last = node;
|
|
}
|
|
else{
|
|
last = last->next = node;
|
|
}
|
|
}
|
|
|
|
StructInside :: struct { // This is not part of struct
|
|
// just in scope
|
|
some_val: U16;
|
|
some_val2: U16;
|
|
}
|
|
|
|
insider: StructInside;
|
|
|
|
named_union_part_of_struct: union{
|
|
some_val: U16;
|
|
some_val2: U32;
|
|
}
|
|
|
|
_: union {
|
|
// Unamed union
|
|
val: U32;
|
|
}
|
|
|
|
}
|
|
|
|
Scope :: scope{
|
|
Thingy::enum:U32{
|
|
@str=10 Value = 1,
|
|
|
|
}
|
|
}
|
|
|
|
//Scope.Thingy
|
|
|
|
Thing::union{
|
|
union:{
|
|
}
|
|
struct:{
|
|
}
|
|
|
|
}
|
|
|
|
Thing::struct{
|
|
data: U32;
|
|
|
|
inside_call :: (param: U32){
|
|
}
|
|
|
|
}
|
|
|
|
call :: (param:U32) U32{
|
|
inner_call :: (param2:U32){
|
|
size_of_s64 = sizeof(:S64);
|
|
size_of_val = sizeof(param);
|
|
|
|
|
|
param2 + 10;
|
|
return;
|
|
}
|
|
|
|
inner_call();
|
|
}
|
|
|
|
@stringify
|
|
Enumeration:enum{
|
|
None,
|
|
Thing = 1 << 10,
|
|
Thing2,
|
|
Thing3,
|
|
}
|
|
|
|
@sllqueue()
|
|
@sllqueue(prefix=thing_scope, next=next_scope)
|
|
Thing::struct{
|
|
Inner_Struct :: {
|
|
test_val : U32;
|
|
}
|
|
thing:Inner_Struct;
|
|
next: Thing*;
|
|
first: Thing*;
|
|
last: Thing*;
|
|
next_scope: Thing*;
|
|
|
|
val: U32[16];
|
|
str: String;
|
|
embed: struct{
|
|
thing: S32;
|
|
}
|
|
}
|
|
|
|
@register(sllqueue, first, last, next)
|
|
sllqueue_push:(base:T1, child:T2) void {
|
|
if(base.first == 0){
|
|
base.first = base.last = child;
|
|
}
|
|
else{
|
|
base.last = base.last.next = child;
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
/*
|
|
function void
|
|
thing_sllqueue_push(){
|
|
|
|
}
|
|
|
|
function void
|
|
thing_scope_sllqueue_push(){
|
|
|
|
}
|
|
*/
|
|
|
|
Builtin types:
|
|
B8,B16,B32,B64
|
|
S8,S16,S32,S64
|
|
U8,U16,U32,U64
|
|
SizeI, SizeU
|
|
F32, F64
|
|
|
|
Decls:
|
|
S32 *var;
|
|
S32 (*func)();
|
|
S32 *var[expr][expr];
|
|
S32 **var;
|
|
|
|
Global scope:
|
|
function S32
|
|
do_thing(S32 a, U32 b){
|
|
stmt_list
|
|
}
|
|
|
|
function S32
|
|
do_thing(S32 a, S32 b);
|
|
|
|
typedef struct Thing Thing;
|
|
struct Thing{};
|
|
typedef struct Thing{} Thing;
|
|
|
|
typedef enum Thingy Thingy;
|
|
enum Thingy{};
|
|
typedef enum Thingy{} Thingy;
|
|
|
|
global S32 variable = expr | compound;
|
|
|
|
// typedef S32 NewName;
|
|
// typedef S32 BaseFunctionType(S32 thing);
|
|
// typedef S32 (*FunctionPointer)(S32 thing);
|
|
|
|
Local scope-(stmts):
|
|
S32 variable = expr;
|
|
variable = expr;
|
|
variable++;
|
|
return 0;
|
|
if(a){}elseif(b){}else{}
|
|
|
|
|
|
|
|
|