about summary refs log tree commit diff stats
path: root/enumerate
Commit message (Expand)AuthorAgeFilesLines
* 3726Kartik K. Agaram2016-12-301-0/+1
* 3450Kartik K. Agaram2016-10-061-5/+0
* 2665Kartik K. Agaram2016-02-172-14/+5
* 2155 - `mu` can now load all files in a directoryKartik K. Agaram2015-09-051-1/+1
* 1439 - support clang in addition to gccKartik K. Agaram2015-05-231-1/+1
* 1276 - make C++ version the defaultKartik K. Agaram2015-05-052-0/+40
} products.resize(2); if (feof(f)) { products.at(0).push_back(0); products.at(1).push_back(1); // eof break; } if (ferror(f)) { raise << maybe(current_recipe_name()) << "file in invalid state in '" << to_string(current_instruction()) << "'\n" << end(); break; } char c = getc(f); // todo: unicode if (c == EOF) { products.at(0).push_back(0); products.at(1).push_back(1); // eof break; } if (ferror(f)) { raise << maybe(current_recipe_name()) << "couldn't read from file in '" << to_string(current_instruction()) << "'\n" << end(); raise << " errno: " << errno << '\n' << end(); break; } products.at(0).push_back(c); products.at(1).push_back(0); // not eof break; } :(before "End Includes") #include :(before "End Primitive Recipe Declarations") _WRITE_TO_FILE, :(before "End Primitive Recipe Numbers") put(Recipe_ordinal, "$write-to-file", _WRITE_TO_FILE); :(before "End Primitive Recipe Checks") case _WRITE_TO_FILE: { if (SIZE(inst.ingredients) != 2) { raise << maybe(get(Recipe, r).name) << "'$write-to-file' requires exactly two ingredients, but got '" << to_original_string(inst) << "'\n" << end(); break; } if (!is_mu_number(inst.ingredients.at(0))) { raise << maybe(get(Recipe, r).name) << "first ingredient of '$write-to-file' should be a number, but got '" << to_string(inst.ingredients.at(0)) << "'\n" << end(); break; } if (!is_mu_character(inst.ingredients.at(1))) { raise << maybe(get(Recipe, r).name) << "second ingredient of '$write-to-file' should be a character, but got '" << to_string(inst.ingredients.at(0)) << "'\n" << end(); break; } if (!inst.products.empty()) { raise << maybe(get(Recipe, r).name) << "'$write-to-file' writes to no products, but got '" << to_original_string(inst) << "'\n" << end(); break; } break; } :(before "End Primitive Recipe Implementations") case _WRITE_TO_FILE: { long long int x = static_cast(ingredients.at(0).at(0)); FILE* f = reinterpret_cast(x); if (f == NULL) { raise << maybe(current_recipe_name()) << "can't write to null file in '" << to_string(current_instruction()) << "'\n" << end(); break; } if (feof(f)) break; if (ferror(f)) { raise << maybe(current_recipe_name()) << "file in invalid state in '" << to_string(current_instruction()) << "'\n" << end(); break; } long long int y = static_cast(ingredients.at(1).at(0)); char c = static_cast(y); putc(c, f); // todo: unicode if (ferror(f)) { raise << maybe(current_recipe_name()) << "couldn't write to file in '" << to_string(current_instruction()) << "'\n" << end(); raise << " errno: " << errno << '\n' << end(); break; } break; } :(before "End Primitive Recipe Declarations") _CLOSE_FILE, :(before "End Primitive Recipe Numbers") put(Recipe_ordinal, "$close-file", _CLOSE_FILE); :(before "End Primitive Recipe Checks") case _CLOSE_FILE: { if (SIZE(inst.ingredients) != 1) { raise << maybe(get(Recipe, r).name) << "'$close-file' requires exactly one ingredient, but got '" << to_original_string(inst) << "'\n" << end(); break; } if (!is_mu_number(inst.ingredients.at(0))) { raise << maybe(get(Recipe, r).name) << "first ingredient of '$close-file' should be a number, but got '" << to_string(inst.ingredients.at(0)) << "'\n" << end(); break; } if (SIZE(inst.products) != 1) { raise << maybe(get(Recipe, r).name) << "'$close-file' requires exactly one product, but got '" << to_original_string(inst) << "'\n" << end(); break; } if (inst.products.at(0).name != inst.ingredients.at(0).name) { raise << maybe(get(Recipe, r).name) << "'$close-file' requires its product to be the same as its ingredient, but got '" << to_original_string(inst) << "'\n" << end(); break; } break; } :(before "End Primitive Recipe Implementations") case _CLOSE_FILE: { long long int x = static_cast(ingredients.at(0).at(0)); FILE* f = reinterpret_cast(x); fclose(f); products.resize(1); products.at(0).push_back(0); // todo: ensure that caller always resets the ingredient break; }