mirror of
https://github.com/Ed94/metadesk.git
synced 2026-07-23 16:07:51 +00:00
[examples] rearrange examples to give big examples their own folder; add hand written files for type info example
This commit is contained in:
+10
-5
@@ -9,12 +9,17 @@ cd ..
|
||||
echo "~~~ Build All Exampes ~~~"
|
||||
bin/bld_core.sh show_ctx
|
||||
|
||||
metasrc="examples/metaprograms"
|
||||
examps="examples"
|
||||
|
||||
bin/bld_core.sh unit type_metadata $metasrc/type_metadata.c
|
||||
bin/bld_core.sh unit parse_check $metasrc/parse_check.c
|
||||
bin/bld_core.sh unit user_errors $metasrc/user_errors.c
|
||||
bin/bld_core.sh unit datadesk_like $metasrc/datadesk_like_template.c
|
||||
bin/bld_core.sh unit type_metadata $examps/type_metadata/type_metadata.c
|
||||
bin/bld_core.sh unit hello_world $examps/intro/hello_world.c
|
||||
bin/bld_core.sh unit parse_check $examps/intro/parse_check.c
|
||||
bin/bld_core.sh unit datadesk_like $examps/intro/datadesk_like_template.c
|
||||
bin/bld_core.sh unit user_errors $examps/user_errors/user_errors.c
|
||||
|
||||
if [ -d $examps/type_metadata/generated/type_info_meta.h ]; then
|
||||
bin/bld_core.sh unit type_info $examps/type_metadata/type_info_final_program.c
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ main(int argc, char **argv){
|
||||
// parse a string
|
||||
MD_String8 name = MD_S8Lit("<name>");
|
||||
MD_String8 hello_world = MD_S8Lit("hello world");
|
||||
MD_ParseResult parse = MD_ParseWholeString(arena, hello_world_name, hello_world);
|
||||
MD_ParseResult parse = MD_ParseWholeString(arena, name, hello_world);
|
||||
|
||||
// print the results
|
||||
MD_PrintDebugDumpFromNode(stdout, parse.node, MD_GenerateFlags_All);
|
||||
@@ -0,0 +1 @@
|
||||
generated/*
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
** Example: type-metadata
|
||||
**
|
||||
** This is a hand written header to be included into the final program to
|
||||
** define types that will be used to layout the metadata tables created by the
|
||||
** generator.
|
||||
**
|
||||
** This file *does not* get included into the generator itself.
|
||||
**
|
||||
*/
|
||||
|
||||
#ifndef TYPE_INFO_H
|
||||
#define TYPE_INFO_H
|
||||
|
||||
typedef enum TypeKind
|
||||
{
|
||||
TypeKind_Null,
|
||||
TypeKind_Basic,
|
||||
TypeKind_Struct,
|
||||
TypeKind_Enum,
|
||||
} TypeKind;
|
||||
|
||||
typedef struct TypeInfo TypeInfo;
|
||||
struct TypeInfo
|
||||
{
|
||||
TypeKind kind;
|
||||
char *name;
|
||||
int name_length;
|
||||
union
|
||||
{
|
||||
// basic
|
||||
int size;
|
||||
|
||||
// struct: array of TypeInfoMember
|
||||
// enum: array of TypeInfoEnumerant
|
||||
int child_count;
|
||||
void *children;
|
||||
};
|
||||
};
|
||||
|
||||
typedef struct TypeInfoMember TypeInfoMember;
|
||||
struct TypeInfoMember
|
||||
{
|
||||
char *name;
|
||||
int name_length;
|
||||
int array_count;
|
||||
TypeInfo *type;
|
||||
};
|
||||
|
||||
typedef struct TypeInfoEnumerant TypeInfoEnumerant;
|
||||
struct TypeInfoEnumerant
|
||||
{
|
||||
char *name;
|
||||
int name_length;
|
||||
int value;
|
||||
};
|
||||
|
||||
#endif //TYPE_INFO_H
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
** Example: type-metadata
|
||||
**
|
||||
** This file shows including the generated type information into a final
|
||||
** program and using that type info to unpack a buffer of data.
|
||||
**
|
||||
*/
|
||||
|
||||
#include "generated/type_info_meta.h"
|
||||
#include "generated/type_info_meta.c"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
|
||||
|
||||
return(0);
|
||||
}
|
||||
@@ -161,7 +161,6 @@ main(int argc, char **argv)
|
||||
printf("%.*s: map\n", MD_S8VArg(node->string));
|
||||
}
|
||||
|
||||
// TODO metadata hand-written portion
|
||||
// TODO check types & build member lists
|
||||
// TODO check maps & build case lists
|
||||
// TODO generate type definitions
|
||||
@@ -45,6 +45,7 @@ type_info_from_shape:
|
||||
Polygon -> RoundedPolygon,
|
||||
}
|
||||
|
||||
|
||||
@map(Shape -> U32; default: 0; auto: 64)
|
||||
max_slot_from_shape:
|
||||
{
|
||||
Reference in New Issue
Block a user