36void showHelp(
const fs::path &program =
"phasor")
38 const std::string programName = program.stem().string();
39 std::println(
"Phasor Programming Language and Toolchain v{}\n"
40 "(C) 2026 Daniel McGuire - Licensed under Apache 2.0\n\n"
41 "Usage: [RAWSCRIPT] | {} [SCRIPT, BYTECODE]\n"
42 "A. PIPE: <text> | {}\n"
43 "B. JIT/BYTECODE: {} <file>\n"
46 PHASOR_VERSION_STRING, programName, programName, programName, programName);
49 std::println(
"A. CMD: echo \"print(^\"Hi\\!\\n^\");\" | {}\n"
50 "A. PWSH: \"print(`\"Hi\\!\\n`\");\" | {}\n"
53 programName, programName, programName, programName);
55 std::println(
"A. echo \"print(\\\"Hi\\!\\\\\\\\n\\\");\" | {}\n"
58 programName, programName, programName);
63 -v, --version Show the version number and exit
64 -c, --command Run a raw script string)");
67int main(
int argc,
char *argv[])
84 const fs::path programPath = argv[0];
85 const fs::path file = argv[1];
87 if (!fs::exists(file))
89 const std::string raw = file.string();
90 if (!raw.empty() && (raw.front() ==
'-' || raw.front() ==
'/'))
92 std::string m_path = raw;
93 m_path.erase(0, m_path.find_first_not_of(
"-/"));
94 if (m_path ==
"help" || m_path ==
"h" || m_path ==
"?" || m_path ==
"h" || m_path ==
"help")
99 else if (m_path ==
"version" || m_path ==
"v")
101 std::println(PHASOR_VERSION_STRING);
104 else if (m_path ==
"command" || m_path ==
"c")
107 auto vm = ScriptRT.createVm();
108 return ScriptRT.runSourceString(argv[2], *vm);
112 std::println(std::cerr,
"Invalid argument: {}", m_path);
117 std::println(std::cerr,
"File not found: {}", raw);
122 const std::string ext = file.extension().string();
127 return ScriptRT.run();
129 else if (ext ==
".phsb")
134 else if (ext ==
".phir")
136 std::println(
"Phasor IR (.phir) compilation not yet implemented.");
141 std::println(std::cerr,
"Unknown extension: {}", ext);
145 catch (
const std::exception &e)
147 std::println(std::cerr,
"Error: {}", e.what());
std::string readStdin()
Reads all content from stdin until EOF (piped input).
void showHelp(const fs::path &program="phasor")