33 lines
1009 B
Plaintext
33 lines
1009 B
Plaintext
// Nyash-only Python parser using PyRuntimeBox (no Rust build)
|
|
static box PythonParserNy {
|
|
parse(code) {
|
|
local src
|
|
if (code == null || code.length() == 0) {
|
|
// Fallback: read from env via Python os.getenv
|
|
local os, getenv
|
|
local py = new PyRuntimeBox()
|
|
os = py.import("os")
|
|
getenv = os.getattr("getenv")
|
|
src = getenv.call("NYASH_PY_CODE").str()
|
|
} else {
|
|
src = code.str()
|
|
}
|
|
|
|
// ast.dump(ast.parse(src))
|
|
local ast, parsef, dumpf, tree, dump, dump_str
|
|
local py2 = new PyRuntimeBox()
|
|
ast = py2.import("ast")
|
|
parsef = ast.getattr("parse")
|
|
tree = parsef.call(src)
|
|
dumpf = ast.getattr("dump")
|
|
dump = dumpf.call(tree)
|
|
dump_str = dump.str()
|
|
|
|
// Minimal JSON (escape quotes minimally by replacing \" -> \\\" )
|
|
// Note: for robust escaping, prefer Python json.dumps in a later pass
|
|
local esc
|
|
esc = dump_str.replace("\"", "\\\"")
|
|
return new StringBox("{\"ast\":\"Module\",\"dump\":\"" + esc + "\"}")
|
|
}
|
|
}
|