diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 3d5940e45..b99621c2a 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -12,6 +12,7 @@ typedef void (Expression::*ExpressionAction)(void); class Expression { public: + static Expression * parse(char * string); void recursiveDraw(); void recursiveLayout(); KDRect m_frame; diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index f4eb90ce6..70182352e 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -4,7 +4,7 @@ int poincare_expression_yyparse(yyscan_t scanner, Expression ** expressionOutput); -void CreateFromString(char * string) { +Expression * Expression::parse(char * string) { yyscan_t scanner; YY_BUFFER_STATE buf; poincare_expression_yylex_init(&scanner); @@ -13,12 +13,16 @@ void CreateFromString(char * string) { poincare_expression_yyparse(scanner, &expression); - expression->recursiveLayout(); - expression->m_frame.origin = KDPOINT(0, 100); - expression->recursiveDraw(); - poincare_expression_yy_delete_buffer(buf, scanner); poincare_expression_yylex_destroy(scanner); + + return expression; +} + +bool Expression::identicalTo(Expression * e) { + // By default, two expression are not identical. + // This should obviously be overriden in subclasses! + return false; } diff --git a/src/hello.cpp b/src/hello.cpp index 9f9213f2e..34e4b2f1d 100644 --- a/src/hello.cpp +++ b/src/hello.cpp @@ -16,7 +16,11 @@ void hello() { if (character == '.') { input[index] = 0; index = 0; - CreateFromString(input); + Expression * e = Expression::parse(input); + e->recursiveLayout(); + e->m_frame.origin = KDPOINT(0, 100); + e->recursiveDraw(); + //FIXME delete e; } else { if (index == 0) { KDFillRect((KDRect){