diff --git a/examples/type_metadata/generated/meta_types.c b/examples/type_metadata/generated/meta_types.c index 67ac7c7..448dbd5 100644 --- a/examples/type_metadata/generated/meta_types.c +++ b/examples/type_metadata/generated/meta_types.c @@ -1,4 +1,4 @@ -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:993 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:991 TypeInfoMember Circle_members[2] = { {"r", 1, -1, &F32_type_info}, {"pos", 3, -1, &V2F32_type_info}, @@ -14,14 +14,14 @@ TypeInfoMember RoundedPolygon_members[3] = { {"p", 1, 1, &V2F32_type_info}, }; -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:1032 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:1030 TypeInfoEnumerant Shape_members[3] = { {"Circle", 6, 1}, {"Segment", 7, 2}, {"Polygon", 7, 3}, }; -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:1068 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:1066 TypeInfo U32_type_info = {TypeKind_Basic, "U32", 3, 4, 0, 0}; TypeInfo F32_type_info = {TypeKind_Basic, "F32", 3, 4, 0, 0}; TypeInfo V2F32_type_info = {TypeKind_Basic, "V2F32", 5, 8, 0, 0}; @@ -30,7 +30,7 @@ TypeInfo RoundedSegment_type_info = {TypeKind_Struct, "RoundedSegment", 14, 3, R TypeInfo RoundedPolygon_type_info = {TypeKind_Struct, "RoundedPolygon", 14, 3, RoundedPolygon_members, 0}; TypeInfo Shape_type_info = {TypeKind_Enum, "Shape", 5, 3, Shape_members, &U32_type_info}; -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:1128 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:1126 TypeInfo* type_info_from_shape(Shape v) { diff --git a/examples/type_metadata/generated/meta_types.h b/examples/type_metadata/generated/meta_types.h index 8251a53..789fcea 100644 --- a/examples/type_metadata/generated/meta_types.h +++ b/examples/type_metadata/generated/meta_types.h @@ -1,6 +1,6 @@ #if !defined(META_TYPES_H) #define META_TYPES_H -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:870 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:868 typedef struct Circle Circle; struct Circle { @@ -29,11 +29,11 @@ Shape_Segment = 2, Shape_Polygon = 3, }; -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:954 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:952 TypeInfo* type_info_from_shape(Shape v); U32 max_slot_from_shape(Shape v); -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:977 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:975 extern TypeInfo U32_type_info; extern TypeInfo F32_type_info; extern TypeInfo V2F32_type_info; diff --git a/source/md.c b/source/md.c index 84f1da2..9e17ed8 100644 --- a/source/md.c +++ b/source/md.c @@ -3530,9 +3530,7 @@ MD_FUNCTION MD_Expr* MD_Expr_NewOp(MD_Arena *arena, MD_ExprOpr *op, MD_Node *op_node, MD_Expr *l, MD_Expr *r) { MD_Expr *result = MD_PushArrayZero(arena, MD_Expr, 1); - result->is_op = 1; - result->op_id = op->op_id; - result->op_ptr = op->op_ptr; + result->op = op; result->md_node = op_node; result->parent = 0; result->left = l; diff --git a/source/md.h b/source/md.h index 5c839a6..28cff5e 100644 --- a/source/md.h +++ b/source/md.h @@ -792,10 +792,7 @@ struct MD_Expr struct MD_Expr *parent; struct MD_Expr *left; struct MD_Expr *right; - MD_b32 is_op; - // TODO(allen): this should be MD_ExprOpr* - MD_u32 op_id; - void *op_ptr; + MD_ExprOpr *op; MD_Node *md_node; }; diff --git a/tests/expression_tests.c b/tests/expression_tests.c index 7878d57..c4b7734 100644 --- a/tests/expression_tests.c +++ b/tests/expression_tests.c @@ -86,7 +86,7 @@ X(PostfixParenBracket, "(]", Postfix, 18) \ typedef enum{ Op_Null, OPERATORS - Op_COUNT + Op_COUNT } Op; #undef X @@ -123,14 +123,14 @@ static MD_String8 node_raw_contents(MD_Node *node, MD_b32 exclude_outer) static void parenthesize_exclude_outer(MD_Arena *arena, OperatorDescription *descs, MD_String8List *l, MD_Expr *node, MD_b32 exclude_outer_parens) { - if(node->is_op) + if(node->op != 0) { if(!exclude_outer_parens) { MD_S8ListPush(arena, l, MD_S8Lit("(")); } - MD_ExprOpr *op = &descs[node->op_id].op; + MD_ExprOpr *op = node->op; if(op->kind == MD_ExprOprKind_Binary || op->kind == MD_ExprOprKind_BinaryRightAssociative) { parenthesize_exclude_outer(arena, descs, l, node->left, 0); @@ -154,7 +154,7 @@ static void parenthesize_exclude_outer(MD_Arena *arena, OperatorDescription *des else if(op->kind == MD_ExprOprKind_Postfix) { parenthesize_exclude_outer(arena, descs, l, node->left, 0); - + MD_String8 op_s = descs[op->op_id].s; if(MD_S8Match(op_s, MD_S8Lit("()"), 0) || MD_S8Match(op_s, MD_S8Lit("[]"), 0) || MD_S8Match(op_s, MD_S8Lit("{}"), 0) || MD_S8Match(op_s, MD_S8Lit("[)"), 0) || @@ -199,9 +199,9 @@ static void parenthesize_exclude_outer(MD_Arena *arena, OperatorDescription *des { MD_S8ListPush(arena, l, MD_S8Lit("[")); } - + MD_S8ListPush(arena, l, MD_S8Lit("...")); - + if(node->md_node->flags & MD_NodeFlag_HasParenRight) { MD_S8ListPush(arena, l, MD_S8Lit(")")); @@ -235,7 +235,7 @@ operator_array[Op_##name].op = (MD_ExprOpr){ .op_id = Op_##name, .kind = MD_Expr #undef X arena = MD_ArenaAlloc(); - + /* NOTE: Operator table bake errors */ { MD_ExprOprList operator_list = {0}; @@ -257,7 +257,7 @@ operator_array[Op_##name].op = (MD_ExprOpr){ .op_id = Op_##name, .kind = MD_Expr MD_Assert(op_table.errors.max_message_kind == MD_MessageKind_Warning && op_table.errors.node_count == 1 && op_table.errors.first->user_ptr == plus_node); - + // NOTE: () not as unary postfix operator_list = (MD_ExprOprList){0}; MD_ExprOprPush(arena, &operator_list, MD_ExprOprKind_Prefix, 1, MD_S8Lit("()"), @@ -308,7 +308,7 @@ operator_array[Op_##name].op = (MD_ExprOpr){ .op_id = Op_##name, .kind = MD_Expr MD_Assert(op_table.errors.max_message_kind == MD_MessageKind_Warning && op_table.errors.node_count == 1 && op_table.errors.first->user_ptr == plus_node); - + // NOTE: Wrong token kind operator operator_list = (MD_ExprOprList){0}; MD_ExprOprPush(arena, &operator_list, MD_ExprOprKind_Prefix, 1, MD_S8Lit("123"), @@ -384,7 +384,7 @@ operator_array[Op_##name].op = (MD_ExprOpr){ .op_id = Op_##name, .kind = MD_Expr { .q = "\"a\" + b + c", .a = "(\"a\" + b) + c" }, { .q = "a{b+c}", .a = "a{...}" }, // NOTE(mal): Non-standard postfix set-like operators { .q = "a[b+c)", .a = "a[...)" }, - + { .q = "(a", .a = "", ExpressionErrorKind_MD, 0}, { .q = "a)", .a = "", ExpressionErrorKind_MD, 1}, { .q = "/a", .a = "", ExpressionErrorKind_Expr, 0},