From 73965bc0e41d32c1b33da04982a46aa46fe4cbcb Mon Sep 17 00:00:00 2001 From: Add00 Date: Mon, 21 Aug 2023 22:47:32 -0400 Subject: [PATCH] input and output can now be closed --- repl/lib_fileio.c | 22 +++++++++++++++++++--- test/scripts/lib/fileio.toy | 8 ++++++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/repl/lib_fileio.c b/repl/lib_fileio.c index d551e83..ca9a69b 100644 --- a/repl/lib_fileio.c +++ b/repl/lib_fileio.c @@ -138,7 +138,11 @@ static int nativeClose(Toy_Interpreter* interpreter, Toy_LiteralArray* arguments Toy_File* file = (Toy_File*)TOY_AS_OPAQUE(selfLiteral); int result = 0; - if (file->fp != NULL) { + if ( + file->fp != stdout && + file->fp != stdin && + file->fp != NULL + ) { result = fclose(file->fp); file->fp = NULL; } @@ -811,18 +815,30 @@ int Toy_hookFileIO(Toy_Interpreter* interpreter, Toy_Literal identifier, Toy_Lit createToyVariableInt(&variables[1], "MAX_FILES_OPEN", FOPEN_MAX); createToyVariableInt(&variables[2], "END_OF_FILE", EOF); + Toy_RefString* outMode = Toy_createRefString("w"); + Toy_RefString* outName = Toy_createRefString("output"); + static Toy_File* outFile; - outFile = createToyFile(Toy_createRefString("w"), Toy_createRefString("output")); + outFile = createToyFile(outMode, outName); outFile->fp = stdout; createToyVariableFile(&variables[3], "output", outFile); + Toy_deleteRefString(outMode); + Toy_deleteRefString(outName); + + Toy_RefString* inMode = Toy_createRefString("r"); + Toy_RefString* inName = Toy_createRefString("input"); + static Toy_File* inFile; - inFile = createToyFile(Toy_createRefString("r"), Toy_createRefString("input")); + inFile = createToyFile(inMode, inName); inFile->fp = stdin; createToyVariableFile(&variables[4], "input", inFile); + Toy_deleteRefString(inMode); + Toy_deleteRefString(inName); + // store the library in an aliased dictionary if (!TOY_IS_NULL(alias)) { // make sure the name isn't taken diff --git a/test/scripts/lib/fileio.toy b/test/scripts/lib/fileio.toy index b8d60fa..d61bb4e 100644 --- a/test/scripts/lib/fileio.toy +++ b/test/scripts/lib/fileio.toy @@ -27,8 +27,8 @@ fn reset() { assert reader.read(string) == "\ntest", "read string failed"; // invaild types - assert input.read(type) == null, "read type failed"; - assert input.read(any) == null, "read any failed"; + assert reader.read(type) == null, "read type failed"; + assert reader.read(any) == null, "read any failed"; reader.close(); } @@ -76,6 +76,7 @@ fn reset() { var result = reader.read(string); assert (result == "d!\n" || result == "d!\\r\n"), "read in read extended failed"; + print result; reader.close(); reset(); @@ -137,4 +138,7 @@ fn reset() { reader.close(); } +input.close(); +output.close(); + print "All good"; \ No newline at end of file