From 72a6924a69f9948c10cb7e0042058c80082abe98 Mon Sep 17 00:00:00 2001 From: ryanfleury Date: Sat, 3 Jul 2021 13:41:22 -0600 Subject: [PATCH] get toy language building again, get tests passing again --- .../example_site/generated/blog1.html | 13 +++++-------- .../example_site/generated/blog2.html | 8 +++----- samples/toy_language/toy_language.c | 6 +++--- source/md_c_helpers.c | 9 ++++----- source/md_c_helpers.h | 6 ++++-- tests/sanity_tests.c | 8 ++++---- 6 files changed, 23 insertions(+), 27 deletions(-) diff --git a/samples/static_site_generator/example_site/generated/blog1.html b/samples/static_site_generator/example_site/generated/blog1.html index ec66352..ea7006b 100644 --- a/samples/static_site_generator/example_site/generated/blog1.html +++ b/samples/static_site_generator/example_site/generated/blog1.html @@ -26,18 +26,15 @@

Test Blog #1

This is my test blog.

30 November 2020

Section 1

-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut ornare neque, vitae finibus leo. Praesent pulvinar, urna id lobortis iaculis, velit turpis luctus tortor, quis malesuada neque neque vitae turpis. Phasellus id molestie elit. Sed elementum ipsum a ligula semper, at varius augue rutrum. Pellentesque fringilla, orci nec fringilla finibus, turpis lacus vehicula elit, nec bibendum magna est quis massa. Aliquam efficitur facilisis nibh, ut sodales sapien scelerisque nec. Integer justo sem, pellentesque et ante imperdiet, interdum placerat sem. - -Nunc hendrerit lobortis commodo. Morbi felis quam, fermentum vitae libero vitae, fermentum sodales quam. Nulla bibendum tellus quis lorem sollicitudin pretium. Etiam commodo ex eget aliquet porta. In sit amet dui eleifend, mattis sem nec, tristique erat. Morbi malesuada fringilla bibendum. Integer odio ex, cursus a sodales quis, vehicula non dolor. - -Praesent vitae pharetra felis. Curabitur non ex non nunc pretium feugiat eu sit amet turpis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean blandit ante leo. Vivamus iaculis mi vel sem tincidunt maximus. Aenean elementum ipsum non laoreet semper. Morbi non felis interdum lectus pulvinar mollis id non purus. Nullam eu ipsum ut turpis aliquam feugiat at non tellus. Suspendisse ornare erat quis enim ullamcorper, at rhoncus nulla suscipit. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut ornare neque, vitae finibus leo. Praesent pulvinar, urna id lobortis iaculis, velit turpis luctus tortor, quis malesuada neque neque vitae turpis. Phasellus id molestie elit. Sed elementum ipsum a ligula semper, at varius augue rutrum. Pellentesque fringilla, orci nec fringilla finibus, turpis lacus vehicula elit, nec bibendum magna est quis massa. Aliquam efficitur facilisis nibh, ut sodales sapien scelerisque nec. Integer justo sem, pellentesque et ante imperdiet, interdum placerat sem.

+

Nunc hendrerit lobortis commodo. Morbi felis quam, fermentum vitae libero vitae, fermentum sodales quam. Nulla bibendum tellus quis lorem sollicitudin pretium. Etiam commodo ex eget aliquet porta. In sit amet dui eleifend, mattis sem nec, tristique erat. Morbi malesuada fringilla bibendum. Integer odio ex, cursus a sodales quis, vehicula non dolor.

+

Praesent vitae pharetra felis. Curabitur non ex non nunc pretium feugiat eu sit amet turpis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean blandit ante leo. Vivamus iaculis mi vel sem tincidunt maximus. Aenean elementum ipsum non laoreet semper. Morbi non felis interdum lectus pulvinar mollis id non purus. Nullam eu ipsum ut turpis aliquam feugiat at non tellus. Suspendisse ornare erat quis enim ullamcorper, at rhoncus nulla suscipit.

Section 2

-Aliquam quis diam at sem interdum imperdiet. Nunc imperdiet ligula tempus nibh semper mattis. Suspendisse fringilla molestie semper. Sed felis dolor, vehicula et tempus sed, porttitor finibus lacus. Pellentesque egestas ex finibus, facilisis tellus suscipit, accumsan turpis. Ut imperdiet vitae nisl eget vestibulum. Donec eu bibendum erat, id maximus magna. Vivamus quis rhoncus justo. Morbi eget commodo lorem, vulputate varius ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer accumsan, sem vel rutrum cursus, odio enim sodales leo, sit amet rutrum odio purus at nisi. Fusce iaculis ante id nunc volutpat tincidunt. Duis nec tincidunt ipsum. Fusce vitae odio ac velit sollicitudin maximus. Vestibulum ante dui, varius auctor ante eu, gravida laoreet justo. - -Vivamus dignissim mauris nec turpis convallis, vitae pellentesque sapien faucibus. Phasellus eu euismod elit, sit amet vehicula diam. Curabitur sit amet leo magna. In est erat, congue vel euismod id, venenatis vitae mauris. Vestibulum sit amet leo eget leo ornare feugiat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vivamus at efficitur ex, a mattis lorem. Maecenas blandit tincidunt tortor vel cursus. In in purus a nisi pretium venenatis in ut lacus. Maecenas venenatis rutrum laoreet. Donec aliquam leo vel risus cursus, placerat pretium lacus fringilla. Suspendisse ut porttitor mauris. +Aliquam quis diam at sem interdum imperdiet. Nunc imperdiet ligula tempus nibh semper mattis. Suspendisse fringilla molestie semper. Sed felis dolor, vehicula et tempus sed, porttitor finibus lacus. Pellentesque egestas ex finibus, facilisis tellus suscipit, accumsan turpis. Ut imperdiet vitae nisl eget vestibulum. Donec eu bibendum erat, id maximus magna. Vivamus quis rhoncus justo. Morbi eget commodo lorem, vulputate varius ipsum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer accumsan, sem vel rutrum cursus, odio enim sodales leo, sit amet rutrum odio purus at nisi. Fusce iaculis ante id nunc volutpat tincidunt. Duis nec tincidunt ipsum. Fusce vitae odio ac velit sollicitudin maximus. Vestibulum ante dui, varius auctor ante eu, gravida laoreet justo.

+

Vivamus dignissim mauris nec turpis convallis, vitae pellentesque sapien faucibus. Phasellus eu euismod elit, sit amet vehicula diam. Curabitur sit amet leo magna. In est erat, congue vel euismod id, venenatis vitae mauris. Vestibulum sit amet leo eget leo ornare feugiat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vivamus at efficitur ex, a mattis lorem. Maecenas blandit tincidunt tortor vel cursus. In in purus a nisi pretium venenatis in ut lacus. Maecenas venenatis rutrum laoreet. Donec aliquam leo vel risus cursus, placerat pretium lacus fringilla. Suspendisse ut porttitor mauris.

Section 3

diff --git a/samples/static_site_generator/example_site/generated/blog2.html b/samples/static_site_generator/example_site/generated/blog2.html index 312a5fc..55a3c73 100644 --- a/samples/static_site_generator/example_site/generated/blog2.html +++ b/samples/static_site_generator/example_site/generated/blog2.html @@ -26,11 +26,9 @@

Hello, Again!

This is another test blog.

28 November 2020

Section 1

-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut ornare neque, vitae finibus leo. Praesent pulvinar, urna id lobortis iaculis, velit turpis luctus tortor, quis malesuada neque neque vitae turpis. Phasellus id molestie elit. Sed elementum ipsum a ligula semper, at varius augue rutrum. Pellentesque fringilla, orci nec fringilla finibus, turpis lacus vehicula elit, nec bibendum magna est quis massa. Aliquam efficitur facilisis nibh, ut sodales sapien scelerisque nec. Integer justo sem, pellentesque et ante imperdiet, interdum placerat sem. - -Nunc hendrerit lobortis commodo. Morbi felis quam, fermentum vitae libero vitae, fermentum sodales quam. Nulla bibendum tellus quis lorem sollicitudin pretium. Etiam commodo ex eget aliquet porta. In sit amet dui eleifend, mattis sem nec, tristique erat. Morbi malesuada fringilla bibendum. Integer odio ex, cursus a sodales quis, vehicula non dolor. - -Praesent vitae pharetra felis. Curabitur non ex non nunc pretium feugiat eu sit amet turpis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean blandit ante leo. Vivamus iaculis mi vel sem tincidunt maximus. Aenean elementum ipsum non laoreet semper. Morbi non felis interdum lectus pulvinar mollis id non purus. Nullam eu ipsum ut turpis aliquam feugiat at non tellus. Suspendisse ornare erat quis enim ullamcorper, at rhoncus nulla suscipit. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut ornare neque, vitae finibus leo. Praesent pulvinar, urna id lobortis iaculis, velit turpis luctus tortor, quis malesuada neque neque vitae turpis. Phasellus id molestie elit. Sed elementum ipsum a ligula semper, at varius augue rutrum. Pellentesque fringilla, orci nec fringilla finibus, turpis lacus vehicula elit, nec bibendum magna est quis massa. Aliquam efficitur facilisis nibh, ut sodales sapien scelerisque nec. Integer justo sem, pellentesque et ante imperdiet, interdum placerat sem.

+

Nunc hendrerit lobortis commodo. Morbi felis quam, fermentum vitae libero vitae, fermentum sodales quam. Nulla bibendum tellus quis lorem sollicitudin pretium. Etiam commodo ex eget aliquet porta. In sit amet dui eleifend, mattis sem nec, tristique erat. Morbi malesuada fringilla bibendum. Integer odio ex, cursus a sodales quis, vehicula non dolor.

+

Praesent vitae pharetra felis. Curabitur non ex non nunc pretium feugiat eu sit amet turpis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean blandit ante leo. Vivamus iaculis mi vel sem tincidunt maximus. Aenean elementum ipsum non laoreet semper. Morbi non felis interdum lectus pulvinar mollis id non purus. Nullam eu ipsum ut turpis aliquam feugiat at non tellus. Suspendisse ornare erat quis enim ullamcorper, at rhoncus nulla suscipit.

diff --git a/samples/toy_language/toy_language.c b/samples/toy_language/toy_language.c index fb867ea..532fa3a 100644 --- a/samples/toy_language/toy_language.c +++ b/samples/toy_language/toy_language.c @@ -156,7 +156,7 @@ EvaluateScope(NamespaceNode *ns, MD_Node *code) MD_Node *opl = MD_NodeFromFlags(first->next, MD_NilNode(), MD_NodeFlag_IsAfterSemicolon|MD_NodeFlag_IsAfterComma); //- rjf: declaration - if(first == last && first->string.size != 0 && !MD_NodeIsNil(first->first_child)) + if(first->next == opl && first->string.size != 0 && !MD_NodeIsNil(first->first_child)) { MD_C_Expr *expr = MD_C_ParseAsExpr(first->first_child, first->last_child); InsertValueToNamespace(&local_namespace, first->string, EvaluateExpr(&local_namespace, expr)); @@ -164,7 +164,7 @@ EvaluateScope(NamespaceNode *ns, MD_Node *code) //- rjf: expr else { - MD_C_Expr *expr = MD_C_ParseAsExpr(first, last); + MD_C_Expr *expr = MD_C_ParseAsExpr(first, opl); if(!MD_C_ExprIsNil(expr)) { result = EvaluateExpr(&local_namespace, expr); @@ -172,7 +172,7 @@ EvaluateScope(NamespaceNode *ns, MD_Node *code) } //- rjf: bump - first = last->next; + first = opl; } return result; diff --git a/source/md_c_helpers.c b/source/md_c_helpers.c index d4fede6..70bea71 100644 --- a/source/md_c_helpers.c +++ b/source/md_c_helpers.c @@ -187,7 +187,6 @@ typedef struct _MD_NodeParseCtx _MD_NodeParseCtx; struct _MD_NodeParseCtx { MD_Node *at; - MD_Node *last; MD_Node *one_past_last; }; @@ -394,19 +393,19 @@ _MD_ParseExpr(_MD_NodeParseCtx *ctx) } MD_FUNCTION_IMPL MD_C_Expr * -MD_C_ParseAsExpr(MD_Node *first, MD_Node *last) +MD_C_ParseAsExpr(MD_Node *first, MD_Node *opl) { - _MD_NodeParseCtx ctx_ = { first, last, last->next }; + _MD_NodeParseCtx ctx_ = { first, opl }; _MD_NodeParseCtx *ctx = &ctx_; return _MD_ParseExpr(ctx); } MD_FUNCTION_IMPL MD_C_Expr * -MD_C_ParseAsType(MD_Node *first, MD_Node *last) +MD_C_ParseAsType(MD_Node *first, MD_Node *opl) { MD_C_Expr *expr = MD_C_NilExpr(); MD_C_Expr *last_expr = expr; - _MD_NodeParseCtx ctx_ = { first, last, last->next }; + _MD_NodeParseCtx ctx_ = { first, opl }; _MD_NodeParseCtx *ctx = &ctx_; #define _MD_PushType(x) if(MD_C_ExprIsNil(last_expr)) { expr = last_expr = x; } else { last_expr = last_expr->sub[0] = x; } MD_Node *set = 0; diff --git a/source/md_c_helpers.h b/source/md_c_helpers.h index 2503b98..b706ac8 100644 --- a/source/md_c_helpers.h +++ b/source/md_c_helpers.h @@ -86,20 +86,22 @@ struct MD_C_Expr }; //~ C_Expression and Type-C_Expression Helper + MD_FUNCTION MD_C_Expr * MD_C_NilExpr(void); MD_FUNCTION MD_b32 MD_C_ExprIsNil(MD_C_Expr *expr); MD_FUNCTION MD_C_ExprKind MD_C_PreUnaryExprKindFromNode(MD_Node *node); MD_FUNCTION MD_C_ExprKind MD_C_BinaryExprKindFromNode(MD_Node *node); MD_FUNCTION MD_C_ExprPrec MD_C_ExprPrecFromExprKind(MD_C_ExprKind kind); MD_FUNCTION MD_C_Expr * MD_C_MakeExpr(MD_Node *node, MD_C_ExprKind kind, MD_C_Expr *left, MD_C_Expr *right); -MD_FUNCTION MD_C_Expr * MD_C_ParseAsExpr(MD_Node *first, MD_Node *last); -MD_FUNCTION MD_C_Expr * MD_C_ParseAsType(MD_Node *first, MD_Node *last); +MD_FUNCTION MD_C_Expr * MD_C_ParseAsExpr(MD_Node *first, MD_Node *opl); +MD_FUNCTION MD_C_Expr * MD_C_ParseAsType(MD_Node *first, MD_Node *opl); MD_FUNCTION MD_i64 MD_C_EvaluateExpr_I64(MD_C_Expr *expr); MD_FUNCTION MD_f64 MD_C_EvaluateExpr_F64(MD_C_Expr *expr); MD_FUNCTION MD_b32 MD_C_ExprMatch(MD_C_Expr *a, MD_C_Expr *b, MD_MatchFlags flags); MD_FUNCTION MD_b32 MD_C_ExprDeepMatch(MD_C_Expr *a, MD_C_Expr *b, MD_MatchFlags flags); //~ C Language Generation + MD_FUNCTION void MD_C_Generate_String(FILE *file, MD_Node *node); MD_FUNCTION void MD_C_Generate_Struct(FILE *file, MD_Node *node); diff --git a/tests/sanity_tests.c b/tests/sanity_tests.c index 4babbde..bb6b1f6 100644 --- a/tests/sanity_tests.c +++ b/tests/sanity_tests.c @@ -646,7 +646,7 @@ int main(void) TestResult(group_opl == group_first->next->next->next); group_first = group_opl; - group_opl = MD_NodeFromFlags(group_first, MD_NilNode(), MD_NodeFlag_IsAfterSemicolon); + group_opl = MD_NodeFromFlags(group_first->next, MD_NilNode(), MD_NodeFlag_IsAfterSemicolon); TestResult(MD_S8Match(group_first->string, MD_S8Lit("a"), 0)); TestResult(MD_S8Match(group_first->next->string, MD_S8Lit("b"), 0)); @@ -661,21 +661,21 @@ int main(void) MD_Node *group_opl = 0; group_first = node->first_child; - group_opl = MD_NodeFromFlags(group_first, MD_NilNode(), MD_NodeFlag_IsAfterComma); + group_opl = MD_NodeFromFlags(group_first->next, MD_NilNode(), MD_NodeFlag_IsAfterComma); TestResult(MD_S8Match(group_first->string, MD_S8Lit("a"), 0)); TestResult(MD_S8Match(group_first->next->string, MD_S8Lit("b"), 0)); TestResult(MD_S8Match(group_first->next->next->string, MD_S8Lit("c"), 0)); TestResult(group_opl == group_first->next->next->next); group_first = group_opl; - group_opl = MD_NodeFromFlags(group_first, MD_NilNode(), MD_NodeFlag_IsAfterComma); + group_opl = MD_NodeFromFlags(group_first->next, MD_NilNode(), MD_NodeFlag_IsAfterComma); TestResult(MD_S8Match(group_first->string, MD_S8Lit("d"), 0)); TestResult(MD_S8Match(group_first->next->string, MD_S8Lit("e"), 0)); TestResult(MD_S8Match(group_first->next->next->string, MD_S8Lit("f"), 0)); TestResult(group_opl == group_first->next->next->next); group_first = group_opl; - group_opl = MD_NodeFromFlags(group_first, MD_NilNode(), MD_NodeFlag_IsAfterComma); + group_opl = MD_NodeFromFlags(group_first->next, MD_NilNode(), MD_NodeFlag_IsAfterComma); TestResult(MD_S8Match(group_first->string, MD_S8Lit("g"), 0)); TestResult(MD_S8Match(group_first->next->string, MD_S8Lit("h"), 0)); TestResult(MD_S8Match(group_first->next->next->string, MD_S8Lit("i"), 0));