Merge branch '89-implement-structs-for-parser' of github.com:Servostar/gemstone into 89-implement-structs-for-parser
This commit is contained in:
commit
9a5f392b67
|
@ -44,6 +44,7 @@ typedef struct CompositeType_t {
|
||||||
Sign sign;
|
Sign sign;
|
||||||
Scale scale;
|
Scale scale;
|
||||||
PrimitiveType primitive;
|
PrimitiveType primitive;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} CompositeType;
|
} CompositeType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -72,6 +73,7 @@ typedef struct BoxMember_t {
|
||||||
const char* name;
|
const char* name;
|
||||||
Type* type;
|
Type* type;
|
||||||
BoxType* box;
|
BoxType* box;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} BoxMember;
|
} BoxMember;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -82,6 +84,7 @@ typedef struct BoxType_t {
|
||||||
// hashtable of members.
|
// hashtable of members.
|
||||||
// Associates the memebers name (const char*) with its type (BoxMember)
|
// Associates the memebers name (const char*) with its type (BoxMember)
|
||||||
GHashTable* member;
|
GHashTable* member;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} BoxType;
|
} BoxType;
|
||||||
|
|
||||||
typedef struct Variable_t Variable;
|
typedef struct Variable_t Variable;
|
||||||
|
@ -90,6 +93,7 @@ typedef struct BoxAccess_t {
|
||||||
// list of recursive box accesses
|
// list of recursive box accesses
|
||||||
// contains a list of BoxMembers (each specifying their own type, name and box type)
|
// contains a list of BoxMembers (each specifying their own type, name and box type)
|
||||||
GArray* member;
|
GArray* member;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} BoxAccess;
|
} BoxAccess;
|
||||||
|
|
||||||
typedef struct Type_t {
|
typedef struct Type_t {
|
||||||
|
@ -103,30 +107,16 @@ typedef struct Type_t {
|
||||||
BoxType box;
|
BoxType box;
|
||||||
ReferenceType reference;
|
ReferenceType reference;
|
||||||
} impl;
|
} impl;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Type;
|
} Type;
|
||||||
|
|
||||||
typedef struct Typedefine_t {
|
typedef struct Typedefine_t {
|
||||||
const char* name;
|
const char* name;
|
||||||
Type type;
|
Type type;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Typedefine;
|
} Typedefine;
|
||||||
|
|
||||||
const Type ShortShortUnsingedIntType = {
|
|
||||||
.kind = TypeKindComposite,
|
|
||||||
.impl = {
|
|
||||||
.composite = {
|
|
||||||
.sign = Unsigned,
|
|
||||||
.scale = 0.25,
|
|
||||||
.primitive = Int
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const Type StringLiteralType = {
|
|
||||||
.kind = TypeKindReference,
|
|
||||||
.impl = {
|
|
||||||
.reference = (ReferenceType) &ShortShortUnsingedIntType,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Reprents the value of type. Can be used to definitons, initialization and for expressions contants.
|
* @brief Reprents the value of type. Can be used to definitons, initialization and for expressions contants.
|
||||||
|
@ -137,6 +127,7 @@ typedef struct TypeValue_t {
|
||||||
Type type;
|
Type type;
|
||||||
// UTF-8 representation of the type's value
|
// UTF-8 representation of the type's value
|
||||||
const char* value;
|
const char* value;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} TypeValue;
|
} TypeValue;
|
||||||
|
|
||||||
// .------------------------------------------------.
|
// .------------------------------------------------.
|
||||||
|
@ -166,6 +157,7 @@ typedef enum IO_Qualifier_t {
|
||||||
typedef struct ParameterDeclaration_t {
|
typedef struct ParameterDeclaration_t {
|
||||||
Type type;
|
Type type;
|
||||||
IO_Qualifier qualifier;
|
IO_Qualifier qualifier;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} ParameterDeclaration;
|
} ParameterDeclaration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -177,6 +169,7 @@ typedef struct ParameterDefinition_t {
|
||||||
// value to initalize the declaration with
|
// value to initalize the declaration with
|
||||||
// NOTE: type of initializer and declaration MUST be equal
|
// NOTE: type of initializer and declaration MUST be equal
|
||||||
TypeValue initializer;
|
TypeValue initializer;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} ParameterDefinition;
|
} ParameterDefinition;
|
||||||
|
|
||||||
typedef enum ParameterKind_t {
|
typedef enum ParameterKind_t {
|
||||||
|
@ -195,12 +188,14 @@ typedef struct Parameter_t {
|
||||||
ParameterDeclaration declaration;
|
ParameterDeclaration declaration;
|
||||||
ParameterDefinition definiton;
|
ParameterDefinition definiton;
|
||||||
} impl;
|
} impl;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Paramer;
|
} Paramer;
|
||||||
|
|
||||||
typedef struct FunctionDefinition_t {
|
typedef struct FunctionDefinition_t {
|
||||||
// hashtable of parameters
|
// hashtable of parameters
|
||||||
// associates a parameters name (const char*) with its parameter declaration (ParameterDeclaration)
|
// associates a parameters name (const char*) with its parameter declaration (ParameterDeclaration)
|
||||||
GArray* parameter;
|
GArray* parameter;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} FunctionDefinition;
|
} FunctionDefinition;
|
||||||
|
|
||||||
// .------------------------------------------------.
|
// .------------------------------------------------.
|
||||||
|
@ -216,6 +211,7 @@ typedef enum StorageQualifier_t {
|
||||||
typedef struct VariableDeclaration_t {
|
typedef struct VariableDeclaration_t {
|
||||||
StorageQualifier qualifier;
|
StorageQualifier qualifier;
|
||||||
Type type;
|
Type type;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} VariableDeclaration;
|
} VariableDeclaration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -227,6 +223,7 @@ typedef struct VariableDeclaration_t {
|
||||||
typedef struct VariableDefiniton_t {
|
typedef struct VariableDefiniton_t {
|
||||||
VariableDeclaration declaration;
|
VariableDeclaration declaration;
|
||||||
TypeValue initializer;
|
TypeValue initializer;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} VariableDefiniton;
|
} VariableDefiniton;
|
||||||
|
|
||||||
typedef enum VariableKind_t {
|
typedef enum VariableKind_t {
|
||||||
|
@ -243,6 +240,7 @@ typedef struct Variable_t {
|
||||||
VariableDefiniton definiton;
|
VariableDefiniton definiton;
|
||||||
BoxMember member;
|
BoxMember member;
|
||||||
} impl;
|
} impl;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Variable;
|
} Variable;
|
||||||
|
|
||||||
// .------------------------------------------------.
|
// .------------------------------------------------.
|
||||||
|
@ -260,6 +258,7 @@ typedef struct Variable_t {
|
||||||
*/
|
*/
|
||||||
typedef struct TypeCast_t {
|
typedef struct TypeCast_t {
|
||||||
Type targetType;
|
Type targetType;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} TypeCast;
|
} TypeCast;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -271,6 +270,7 @@ typedef struct TypeCast_t {
|
||||||
*/
|
*/
|
||||||
typedef struct Transmute_t {
|
typedef struct Transmute_t {
|
||||||
Type targetType;
|
Type targetType;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Transmute;
|
} Transmute;
|
||||||
|
|
||||||
// .------------------------------------------------.
|
// .------------------------------------------------.
|
||||||
|
@ -358,6 +358,7 @@ typedef struct Operation_t {
|
||||||
LogicalOperator logical;
|
LogicalOperator logical;
|
||||||
BitwiseOperator bitwise;
|
BitwiseOperator bitwise;
|
||||||
} impl;
|
} impl;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Operation;
|
} Operation;
|
||||||
|
|
||||||
// .------------------------------------------------.
|
// .------------------------------------------------.
|
||||||
|
@ -380,6 +381,7 @@ typedef struct Expression_t {
|
||||||
TypeValue constant;
|
TypeValue constant;
|
||||||
Variable variable;
|
Variable variable;
|
||||||
} impl;
|
} impl;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Expression;
|
} Expression;
|
||||||
|
|
||||||
// .------------------------------------------------.
|
// .------------------------------------------------.
|
||||||
|
@ -391,6 +393,7 @@ typedef struct FunctionCall_t {
|
||||||
FunctionDefinition* function;
|
FunctionDefinition* function;
|
||||||
// list of expression arguments
|
// list of expression arguments
|
||||||
GArray* expressions;
|
GArray* expressions;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} FunctionCall;
|
} FunctionCall;
|
||||||
|
|
||||||
typedef struct FunctionBoxCall_t {
|
typedef struct FunctionBoxCall_t {
|
||||||
|
@ -401,11 +404,13 @@ typedef struct FunctionBoxCall_t {
|
||||||
// box which has the function defined for it
|
// box which has the function defined for it
|
||||||
// NOTE: must be of TypeKind: Box
|
// NOTE: must be of TypeKind: Box
|
||||||
Variable selfArgument;
|
Variable selfArgument;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} FunctionBoxCall;
|
} FunctionBoxCall;
|
||||||
|
|
||||||
typedef struct Block_t {
|
typedef struct Block_t {
|
||||||
// array of statements
|
// array of statements
|
||||||
GArray* statemnts;
|
GArray* statemnts;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Block;
|
} Block;
|
||||||
|
|
||||||
// .------------------------------------------------.
|
// .------------------------------------------------.
|
||||||
|
@ -415,6 +420,7 @@ typedef struct Block_t {
|
||||||
typedef struct While_t {
|
typedef struct While_t {
|
||||||
Expression conditon;
|
Expression conditon;
|
||||||
Block block;
|
Block block;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} While;
|
} While;
|
||||||
|
|
||||||
// .------------------------------------------------.
|
// .------------------------------------------------.
|
||||||
|
@ -424,15 +430,18 @@ typedef struct While_t {
|
||||||
typedef struct If_t {
|
typedef struct If_t {
|
||||||
Expression conditon;
|
Expression conditon;
|
||||||
Block block;
|
Block block;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} If;
|
} If;
|
||||||
|
|
||||||
typedef struct ElseIf_t {
|
typedef struct ElseIf_t {
|
||||||
Expression conditon;
|
Expression conditon;
|
||||||
Block block;
|
Block block;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} ElseIf;
|
} ElseIf;
|
||||||
|
|
||||||
typedef struct Else_t {
|
typedef struct Else_t {
|
||||||
Block block;
|
Block block;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Else;
|
} Else;
|
||||||
|
|
||||||
typedef struct Branch_t {
|
typedef struct Branch_t {
|
||||||
|
@ -440,6 +449,7 @@ typedef struct Branch_t {
|
||||||
// list of else-ifs (can be empty/NULL)
|
// list of else-ifs (can be empty/NULL)
|
||||||
GArray* elseIfBranches;
|
GArray* elseIfBranches;
|
||||||
Else elseBranch;
|
Else elseBranch;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Branch;
|
} Branch;
|
||||||
|
|
||||||
// .------------------------------------------------.
|
// .------------------------------------------------.
|
||||||
|
@ -449,6 +459,7 @@ typedef struct Branch_t {
|
||||||
typedef struct Assignment_t {
|
typedef struct Assignment_t {
|
||||||
Variable* variable;
|
Variable* variable;
|
||||||
Expression value;
|
Expression value;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Assignment;
|
} Assignment;
|
||||||
|
|
||||||
typedef enum StatementKind_t {
|
typedef enum StatementKind_t {
|
||||||
|
@ -467,6 +478,7 @@ typedef struct Statement_t {
|
||||||
Branch branch;
|
Branch branch;
|
||||||
Assignment assignment;
|
Assignment assignment;
|
||||||
} impl;
|
} impl;
|
||||||
|
AST_NODE_PTR nodePtr;
|
||||||
} Statement;
|
} Statement;
|
||||||
|
|
||||||
// .------------------------------------------------.
|
// .------------------------------------------------.
|
||||||
|
|
Loading…
Reference in New Issue