diff options
-rw-r--r-- | dimension/lexer.l | 8 | ||||
-rw-r--r-- | dimension/realize.c | 13 | ||||
-rw-r--r-- | dimension/realize.h | 1 |
3 files changed, 21 insertions, 1 deletions
diff --git a/dimension/lexer.l b/dimension/lexer.l index b8bfbb0..5001d3a 100644 --- a/dimension/lexer.l +++ b/dimension/lexer.l @@ -17,7 +17,13 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * *************************************************************************/ -%option reentrant stack yylineno noyywrap prefix="dmnsn_yy" outfile="lex.yy.c" +%option reentrant +%option stack +%option yylineno +%option noyywrap +%option never-interactive +%option prefix="dmnsn_yy" +%option outfile="lex.yy.c" %{ #include "parse.h" diff --git a/dimension/realize.c b/dimension/realize.c index 7ca3ae2..bbbe4e7 100644 --- a/dimension/realize.c +++ b/dimension/realize.c @@ -17,10 +17,13 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * *************************************************************************/ +#define _GNU_SOURCE /* For fmemopen */ + #include "realize.h" #include "parse.h" #include "utility.h" #include <math.h> +#include <stdio.h> static double dmnsn_realize_float(dmnsn_astnode astnode) @@ -617,3 +620,13 @@ dmnsn_realize(FILE *file, const char *filename) } return dmnsn_realize_astree(astree); } + +dmnsn_scene * +dmnsn_realize_string(const char *str) +{ + FILE *file = fmemopen((void *)str, strlen(str), "r"); + if (!file) { + return NULL; + } + return dmnsn_realize(file, "<string>"); +} diff --git a/dimension/realize.h b/dimension/realize.h index dbd71df..f9b4d61 100644 --- a/dimension/realize.h +++ b/dimension/realize.h @@ -23,5 +23,6 @@ #include "../libdimension/dimension.h" dmnsn_scene *dmnsn_realize(FILE *file, const char *filename); +dmnsn_scene *dmnsn_realize_string(const char *str); #endif /* REALIZE_H */ |