Add beginnings of subcompiler

This commit is contained in:
James McKaskill 2013-05-07 22:54:30 -04:00
parent 3f29732c69
commit c5e771dcd0
9 changed files with 668 additions and 216 deletions

View file

@ -1,222 +1,319 @@
#include "schema.h"
void read_Node(const struct Node_ptr *p, struct Node *s) {
s->id = capn_read64(&p->p, 0);
s->displayName = capn_get_text(&p->p, 0);
s->scopeId = capn_read64(&p->p, 8);
s->nestedNodes = capn_getp(&p->p, 1);
s->annotations = capn_getp(&p->p, 2);
s->body_tag = capn_read16(&p->p, 16);
void get_Node(struct Node *s, Node_list l, int i) {
Node_ptr p = {capn_getp(l.p, i)};
read_Node(s, p);
}
void get_Node_NestedNode(struct Node_NestedNode *s, Node_NestedNode_list l, int i) {
Node_NestedNode_ptr p = {capn_getp(l.p, i)};
read_Node_NestedNode(s, p);
}
void get_Type(struct Type *s, Type_list l, int i) {
Type_ptr p = {capn_getp(l.p, i)};
read_Type(s, p);
}
void get_Value(struct Value *s, Value_list l, int i) {
Value_ptr p = {capn_getp(l.p, i)};
read_Value(s, p);
}
void get_Annotation(struct Annotation *s, Annotation_list l, int i) {
Annotation_ptr p = {capn_getp(l.p, i)};
read_Annotation(s, p);
}
void get_FileNode(struct FileNode *s, FileNode_list l, int i) {
FileNode_ptr p = {capn_getp(l.p, i)};
read_FileNode(s, p);
}
void get_FileNode_Import(struct FileNode_Import *s, FileNode_Import_list l, int i) {
FileNode_Import_ptr p = {capn_getp(l.p, i)};
read_FileNode_Import(s, p);
}
void get_StructNode(struct StructNode *s, StructNode_list l, int i) {
StructNode_ptr p = {capn_getp(l.p, i)};
read_StructNode(s, p);
}
void get_StructNode_Member(struct StructNode_Member *s, StructNode_Member_list l, int i) {
StructNode_Member_ptr p = {capn_getp(l.p, i)};
read_StructNode_Member(s, p);
}
void get_StructNode_Field(struct StructNode_Field *s, StructNode_Field_list l, int i) {
StructNode_Field_ptr p = {capn_getp(l.p, i)};
read_StructNode_Field(s, p);
}
void get_StructNode_Union(struct StructNode_Union *s, StructNode_Union_list l, int i) {
StructNode_Union_ptr p = {capn_getp(l.p, i)};
read_StructNode_Union(s, p);
}
void get_EnumNode(struct EnumNode *s, EnumNode_list l, int i) {
EnumNode_ptr p = {capn_getp(l.p, i)};
read_EnumNode(s, p);
}
void get_EnumNode_Enumerant(struct EnumNode_Enumerant *s, EnumNode_Enumerant_list l, int i) {
EnumNode_Enumerant_ptr p = {capn_getp(l.p, i)};
read_EnumNode_Enumerant(s, p);
}
void get_InterfaceNode(struct InterfaceNode *s, InterfaceNode_list l, int i) {
InterfaceNode_ptr p = {capn_getp(l.p, i)};
read_InterfaceNode(s, p);
}
void get_InterfaceNode_Method(struct InterfaceNode_Method *s, InterfaceNode_Method_list l, int i) {
InterfaceNode_Method_ptr p = {capn_getp(l.p, i)};
read_InterfaceNode_Method(s, p);
}
void get_InterfaceNode_Method_Param(struct InterfaceNode_Method_Param *s, InterfaceNode_Method_Param_list l, int i) {
InterfaceNode_Method_Param_ptr p = {capn_getp(l.p, i)};
read_InterfaceNode_Method_Param(s, p);
}
void get_ConstNode(struct ConstNode *s, ConstNode_list l, int i) {
ConstNode_ptr p = {capn_getp(l.p, i)};
read_ConstNode(s, p);
}
void get_AnnotationNode(struct AnnotationNode *s, AnnotationNode_list l, int i) {
AnnotationNode_ptr p = {capn_getp(l.p, i)};
read_AnnotationNode(s, p);
}
void get_CodeGeneratorRequest(struct CodeGeneratorRequest *s, CodeGeneratorRequest_list l, int i) {
CodeGeneratorRequest_ptr p = {capn_getp(l.p, i)};
read_CodeGeneratorRequest(s, p);
}
void read_Node(struct Node *s, Node_ptr p) {
s->id = capn_read64(p.p, 0);
s->displayName = capn_get_text(p.p, 0);
s->scopeId = capn_read64(p.p, 8);
s->nestedNodes.p = capn_getp(p.p, 1);
s->annotations.p = capn_getp(p.p, 2);
s->body_tag = capn_read16(p.p, 16);
switch (s->body_tag) {
case Node_fileNode:
s->body.fileNode.p = capn_getp(&p->p, 3);
s->body.fileNode.p = capn_getp(p.p, 3);
break;
case Node_structNode:
s->body.structNode.p = capn_getp(&p->p, 3);
s->body.structNode.p = capn_getp(p.p, 3);
break;
case Node_enumNode:
s->body.enumNode.p = capn_getp(&p->p, 3);
s->body.enumNode.p = capn_getp(p.p, 3);
break;
case Node_interfaceNode:
s->body.interfaceNode.p = capn_getp(&p->p, 3);
s->body.interfaceNode.p = capn_getp(p.p, 3);
break;
case Node_constNode:
s->body.constNode.p = capn_getp(&p->p, 3);
s->body.constNode.p = capn_getp(p.p, 3);
break;
case Node_annotationNode:
s->body.annotationNode.p = capn_getp(&p->p, 3);
s->body.annotationNode.p = capn_getp(p.p, 3);
break;
default:
break;
}
}
void read_Node_NestedNode(const struct Node_NestedNode_ptr *p, struct Node_NestedNode *s) {
s->name = capn_get_text(&p->p, 0);
s->id = capn_read64(&p->p, 0);
void read_Node_NestedNode(struct Node_NestedNode *s, Node_NestedNode_ptr p) {
s->name = capn_get_text(p.p, 0);
s->id = capn_read64(p.p, 0);
}
void read_Type(const struct Type_ptr *p, struct Type *s) {
s->body_tag = capn_read16(&p->p, 0);
void read_Type(struct Type *s, Type_ptr p) {
s->body_tag = capn_read16(p.p, 0);
switch (s->body_tag) {
case Type_listType:
s->body.listType.p = capn_getp(&p->p, 0);
s->body.listType.p = capn_getp(p.p, 0);
break;
case Type_enumType:
s->body.enumType = capn_read64(&p->p, 0);
s->body.enumType = capn_read64(p.p, 0);
break;
case Type_structType:
s->body.structType = capn_read64(&p->p, 0);
s->body.structType = capn_read64(p.p, 0);
break;
case Type_interfaceType:
s->body.interfaceType = capn_read64(&p->p, 0);
s->body.interfaceType = capn_read64(p.p, 0);
break;
default:
break;
}
}
void read_Value(const struct Value_ptr *p, struct Value *s) {
s->body_tag = capn_read16(&p->p, 0);
void read_Value(struct Value *s, Value_ptr p) {
s->body_tag = capn_read16(p.p, 0);
switch (s->body_tag) {
case Value_boolValue:
s->body.boolValue = (capn_read8(&p->p, 8) & 1) != 0;
s->body.boolValue = (capn_read8(p.p, 8) & 1) != 0;
break;
case Value_int8Value:
s->body.int8Value = (int8_t) capn_read8(&p->p, 8);
s->body.int8Value = (int8_t) capn_read8(p.p, 8);
break;
case Value_int16Value:
s->body.int16Value = (int16_t) capn_read16(&p->p, 8);
s->body.int16Value = (int16_t) capn_read16(p.p, 8);
break;
case Value_int32Value:
s->body.int32Value = (int32_t) capn_read32(&p->p, 8);
s->body.int32Value = (int32_t) capn_read32(p.p, 8);
break;
case Value_int64Value:
s->body.int64Value = (int64_t) capn_read64(&p->p, 8);
s->body.int64Value = (int64_t) capn_read64(p.p, 8);
break;
case Value_uint8Value:
s->body.uint8Value = capn_read8(&p->p, 8);
s->body.uint8Value = capn_read8(p.p, 8);
break;
case Value_uint16Value:
s->body.uint16Value = capn_read16(&p->p, 8);
s->body.uint16Value = capn_read16(p.p, 8);
break;
case Value_uint32Value:
s->body.uint32Value = capn_read32(&p->p, 8);
s->body.uint32Value = capn_read32(p.p, 8);
break;
case Value_uint64Value:
s->body.uint64Value = capn_read64(&p->p, 8);
s->body.uint64Value = capn_read64(p.p, 8);
break;
case Value_float32Value:
s->body.float32Value = capn_read_float(&p->p, 8, 0.0f);
s->body.float32Value = capn_read_float(p.p, 8, 0.0f);
break;
case Value_float64Value:
s->body.float64Value = capn_read_double(&p->p, 8, 0.0);
s->body.float64Value = capn_read_double(p.p, 8, 0.0);
break;
case Value_textValue:
s->body.textValue = capn_get_text(&p->p, 0);
s->body.textValue = capn_get_text(p.p, 0);
break;
case Value_dataValue:
s->body.dataValue = capn_get_data(&p->p, 0);
s->body.dataValue = capn_get_data(p.p, 0);
break;
case Value_listValue:
s->body.listValue = capn_getp(&p->p, 0);
s->body.listValue = capn_getp(p.p, 0);
break;
case Value_enumValue:
s->body.enumValue = capn_read16(&p->p, 8);
s->body.enumValue = capn_read16(p.p, 8);
break;
case Value_structValue:
s->body.structValue = capn_getp(&p->p, 0);
s->body.structValue = capn_getp(p.p, 0);
break;
case Value_objectValue:
s->body.objectValue = capn_getp(&p->p, 0);
s->body.objectValue = capn_getp(p.p, 0);
break;
default:
break;
}
}
void read_Annotation(const struct Annotation_ptr *p, struct Annotation *s) {
s->id = capn_read64(&p->p, 0);
s->value.p = capn_getp(&p->p, 0);
void read_Annotation(struct Annotation *s, Annotation_ptr p) {
s->id = capn_read64(p.p, 0);
s->value.p = capn_getp(p.p, 0);
}
void read_FileNode(const struct FileNode_ptr *p, struct FileNode *s) {
s->imports = capn_getp(&p->p, 0);
void read_FileNode(struct FileNode *s, FileNode_ptr p) {
s->imports.p = capn_getp(p.p, 0);
}
void read_FileNode_Import(const struct FileNode_Import_ptr *p, struct FileNode_Import *s) {
s->id = capn_read64(&p->p, 0);
s->name = capn_get_text(&p->p, 0);
void read_FileNode_Import(struct FileNode_Import *s, FileNode_Import_ptr p) {
s->id = capn_read64(p.p, 0);
s->name = capn_get_text(p.p, 0);
}
void read_StructNode(const struct StructNode_ptr *p, struct StructNode *s) {
s->dataSectionWordSize = capn_read16(&p->p, 0);
s->pointerSectionSize = capn_read16(&p->p, 2);
s->preferredListEncoding = (enum ElementSize) capn_read16(&p->p, 4);
s->members = capn_getp(&p->p, 0);
void read_StructNode(struct StructNode *s, StructNode_ptr p) {
s->dataSectionWordSize = capn_read16(p.p, 0);
s->pointerSectionSize = capn_read16(p.p, 2);
s->preferredListEncoding = (enum ElementSize) capn_read16(p.p, 4);
s->members.p = capn_getp(p.p, 0);
}
void read_StructNode_Member(const struct StructNode_Member_ptr *p, struct StructNode_Member *s) {
s->name = capn_get_text(&p->p, 0);
s->ordinal = capn_read16(&p->p, 0);
s->codeOrder = capn_read16(&p->p, 2);
s->annotations = capn_getp(&p->p, 1);
s->body_tag = (enum StructNode_Member_body) capn_read16(&p->p, 4);
void read_StructNode_Member(struct StructNode_Member *s, StructNode_Member_ptr p) {
s->name = capn_get_text(p.p, 0);
s->ordinal = capn_read16(p.p, 0);
s->codeOrder = capn_read16(p.p, 2);
s->annotations.p = capn_getp(p.p, 1);
s->body_tag = (enum StructNode_Member_body) capn_read16(p.p, 4);
switch (s->body_tag) {
case StructNode_Member_fieldMember:
s->body.fieldMember.p = capn_getp(&p->p, 2);
s->body.fieldMember.p = capn_getp(p.p, 2);
break;
case StructNode_Member_unionMember:
s->body.unionMember.p = capn_getp(&p->p, 2);
s->body.unionMember.p = capn_getp(p.p, 2);
break;
default:
break;
}
}
void read_StructNode_Field(const struct StructNode_Field_ptr *p, struct StructNode_Field *s) {
s->offset = capn_read32(&p->p, 0);
s->type.p = capn_getp(&p->p, 0);
s->defaultValue.p = capn_getp(&p->p, 1);
void read_StructNode_Field(struct StructNode_Field *s, StructNode_Field_ptr p) {
s->offset = capn_read32(p.p, 0);
s->type.p = capn_getp(p.p, 0);
s->defaultValue.p = capn_getp(p.p, 1);
}
void read_StructNode_Union(const struct StructNode_Union_ptr *p, struct StructNode_Union *s) {
s->discriminantOffset = capn_read32(&p->p, 0);
s->members = capn_getp(&p->p, 0);
void read_StructNode_Union(struct StructNode_Union *s, StructNode_Union_ptr p) {
s->discriminantOffset = capn_read32(p.p, 0);
s->members.p = capn_getp(p.p, 0);
}
void read_EnumNode(const struct EnumNode_ptr *p, struct EnumNode *s) {
s->enumerants = capn_getp(&p->p, 0);
void read_EnumNode(struct EnumNode *s, EnumNode_ptr p) {
s->enumerants.p = capn_getp(p.p, 0);
}
void read_EnumNode_Enumerant(const struct EnumNode_Enumerant_ptr *p, struct EnumNode_Enumerant *s) {
s->name = capn_get_text(&p->p, 0);
s->codeOrder = capn_read16(&p->p, 0);
s->annotations = capn_getp(&p->p, 1);
void read_EnumNode_Enumerant(struct EnumNode_Enumerant *s, EnumNode_Enumerant_ptr p) {
s->name = capn_get_text(p.p, 0);
s->codeOrder = capn_read16(p.p, 0);
s->annotations.p = capn_getp(p.p, 1);
}
void read_InterfaceNode(const struct InterfaceNode_ptr *p, struct InterfaceNode *s) {
s->methods = capn_getp(&p->p, 0);
void read_InterfaceNode(struct InterfaceNode *s, InterfaceNode_ptr p) {
s->methods.p = capn_getp(p.p, 0);
}
void read_InterfaceNode_Method(const struct InterfaceNode_Method_ptr *p, struct InterfaceNode_Method *s) {
s->name = capn_get_text(&p->p, 0);
s->codeOrder = capn_read16(&p->p, 0);
s->params = capn_getp(&p->p, 1);
s->requiredParamCount = capn_read16(&p->p, 2);
s->returnType.p = capn_getp(&p->p, 2);
s->annotations = capn_getp(&p->p, 3);
void read_InterfaceNode_Method(struct InterfaceNode_Method *s, InterfaceNode_Method_ptr p) {
s->name = capn_get_text(p.p, 0);
s->codeOrder = capn_read16(p.p, 0);
s->params.p = capn_getp(p.p, 1);
s->requiredParamCount = capn_read16(p.p, 2);
s->returnType.p = capn_getp(p.p, 2);
s->annotations.p = capn_getp(p.p, 3);
}
void read_InterfaceNode_Method_Param(const struct InterfaceNode_Method_Param_ptr *p, struct InterfaceNode_Method_Param *s) {
s->name = capn_get_text(&p->p, 0);
s->type.p = capn_getp(&p->p, 1);
s->defaultValue.p = capn_getp(&p->p, 2);
s->annotations = capn_getp(&p->p, 3);
void read_InterfaceNode_Method_Param(struct InterfaceNode_Method_Param *s, InterfaceNode_Method_Param_ptr p) {
s->name = capn_get_text(p.p, 0);
s->type.p = capn_getp(p.p, 1);
s->defaultValue.p = capn_getp(p.p, 2);
s->annotations.p = capn_getp(p.p, 3);
}
void read_ConstNode(const struct ConstNode_ptr *p, struct ConstNode *s) {
s->type.p = capn_getp(&p->p, 0);
s->value.p = capn_getp(&p->p, 1);
void read_ConstNode(struct ConstNode *s, ConstNode_ptr p) {
s->type.p = capn_getp(p.p, 0);
s->value.p = capn_getp(p.p, 1);
}
void read_AnnotationNode(const struct AnnotationNode_ptr *p, struct AnnotationNode *s) {
s->type.p = capn_getp(&p->p, 0);
s->targetsFile = (capn_read8(&p->p, 0) & 1) != 0;
s->targetsConst = (capn_read8(&p->p, 0) & 3) != 0;
s->targetsEnum = (capn_read8(&p->p, 0) & 4) != 0;
s->targetsEnumerant = (capn_read8(&p->p, 0) & 8) != 0;
s->targetsStruct = (capn_read8(&p->p, 0) & 16) != 0;
s->targetsField = (capn_read8(&p->p, 0) & 32) != 0;
s->targetsUnion = (capn_read8(&p->p, 0) & 64) != 0;
s->targetsInterface = (capn_read8(&p->p, 0) & 128) != 0;
s->targetsMethod = (capn_read8(&p->p, 1) & 1) != 0;
s->targetsParam = (capn_read8(&p->p, 1) & 2) != 0;
s->targetsAnnotation = (capn_read8(&p->p, 1) & 4) != 0;
void read_AnnotationNode(struct AnnotationNode *s, AnnotationNode_ptr p) {
s->type.p = capn_getp(p.p, 0);
s->targetsFile = (capn_read8(p.p, 0) & 1) != 0;
s->targetsConst = (capn_read8(p.p, 0) & 3) != 0;
s->targetsEnum = (capn_read8(p.p, 0) & 4) != 0;
s->targetsEnumerant = (capn_read8(p.p, 0) & 8) != 0;
s->targetsStruct = (capn_read8(p.p, 0) & 16) != 0;
s->targetsField = (capn_read8(p.p, 0) & 32) != 0;
s->targetsUnion = (capn_read8(p.p, 0) & 64) != 0;
s->targetsInterface = (capn_read8(p.p, 0) & 128) != 0;
s->targetsMethod = (capn_read8(p.p, 1) & 1) != 0;
s->targetsParam = (capn_read8(p.p, 1) & 2) != 0;
s->targetsAnnotation = (capn_read8(p.p, 1) & 4) != 0;
}
void read_CodeGeneratorRequest(const struct CodeGeneratorRequest_ptr *p, struct CodeGeneratorRequest *s) {
s->nodes = capn_getp(&p->p, 0);
s->requestedFiles = capn_getp(&p->p, 1);
void read_CodeGeneratorRequest(struct CodeGeneratorRequest *s, CodeGeneratorRequest_ptr p) {
s->nodes.p = capn_getp(p.p, 0);
s->requestedFiles = capn_getp(p.p, 1);
}