Skip to content

Commit 820a231

Browse files
committed
Add Pyodide Evaluators to all slang
1 parent 57c477c commit 820a231

9 files changed

Lines changed: 116 additions & 7 deletions

File tree

rollup.config.js

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,55 @@ const config = [
5252
plugins: plugins(),
5353
},
5454
{
55-
input: "src/pyodide/index.ts",
55+
input: "src/pyodide/evaluators/full.ts",
5656
output: {
57-
file: "dist/pyodide-evaluator.cjs",
57+
file: "dist/pyodide-evaluator-full.cjs",
5858
format: "cjs",
59-
name: "PyodideEvaluator",
59+
name: "PyodideEvaluatorFull",
60+
sourcemap: true,
61+
inlineDynamicImports: true,
62+
},
63+
plugins: plugins(),
64+
},
65+
{
66+
input: "src/pyodide/evaluators/chapter1.ts",
67+
output: {
68+
file: "dist/pyodide-evaluator-1.cjs",
69+
format: "cjs",
70+
name: "PyodideEvaluator1",
71+
sourcemap: true,
72+
inlineDynamicImports: true,
73+
},
74+
plugins: plugins(),
75+
},
76+
{
77+
input: "src/pyodide/evaluators/chapter2.ts",
78+
output: {
79+
file: "dist/pyodide-evaluator-2.cjs",
80+
format: "cjs",
81+
name: "PyodideEvaluator2",
82+
sourcemap: true,
83+
inlineDynamicImports: true,
84+
},
85+
plugins: plugins(),
86+
},
87+
{
88+
input: "src/pyodide/evaluators/chapter3.ts",
89+
output: {
90+
file: "dist/pyodide-evaluator-3.cjs",
91+
format: "cjs",
92+
name: "PyodideEvaluator3",
93+
sourcemap: true,
94+
inlineDynamicImports: true,
95+
},
96+
plugins: plugins(),
97+
},
98+
{
99+
input: "src/pyodide/evaluators/chapter4.ts",
100+
output: {
101+
file: "dist/pyodide-evaluator-4.cjs",
102+
format: "cjs",
103+
name: "PyodideEvaluator4",
60104
sourcemap: true,
61105
inlineDynamicImports: true,
62106
},

src/parser/python-grammar.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
// @ts-nocheck
12
// Generated automatically by nearley, version 2.20.1
23
// http://github.com/Hardmath123/nearley
34
function id(x) {
45
return x[0];
56
}
67

7-
import { StmtNS, ExprNS } from "../ast-types";
8+
import { ExprNS, StmtNS } from "../ast-types";
89
import pythonLexer from "./lexer";
910
import { toAstToken } from "./token-bridge";
1011

src/pyodide/PyodideEvaluator.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { BasicEvaluator, IRunnerPlugin } from "@sourceacademy/conductor/runner";
22
import type { PyodideInterface } from "pyodide";
3+
import { parse } from "../parser/parser-adapter";
4+
import { analyze } from "../resolver/analysis";
5+
import { getNonTorchImportRoots, rewriteTorchImports } from "./importAnalyzer";
36
import { loadPyodideGeneric } from "./loadPyodide";
47
import { loadTorch } from "./loadTorch";
5-
import { rewriteTorchImports, getNonTorchImportRoots } from "./importAnalyzer";
68

7-
export default class PyodideEvaluator extends BasicEvaluator {
8-
private pyodide: Promise<PyodideInterface>;
9+
export default abstract class PyodideEvaluator extends BasicEvaluator {
10+
protected pyodide: Promise<PyodideInterface>;
911
private torchLoaded = false;
1012

1113
constructor(conductor: IRunnerPlugin) {
@@ -21,7 +23,11 @@ export default class PyodideEvaluator extends BasicEvaluator {
2123
});
2224
}
2325

26+
protected abstract validateChunk(_chunk: string): void;
27+
2428
async evaluateChunk(chunk: string): Promise<void> {
29+
this.validateChunk(chunk);
30+
2531
const pyodide = await this.pyodide;
2632

2733
// --- Use Python's ast module (via Pyodide) to detect and rewrite torch imports ---
@@ -57,3 +63,18 @@ if missing:
5763
this.conductor.sendOutput(output);
5864
}
5965
}
66+
67+
export class ChapterPyodideEvaluator extends PyodideEvaluator {
68+
private chapter: number;
69+
70+
constructor(conductor: IRunnerPlugin, chapter: number) {
71+
super(conductor);
72+
this.chapter = chapter;
73+
}
74+
75+
protected validateChunk(chunk: string): void {
76+
const script = chunk + "\n";
77+
const ast = parse(script);
78+
analyze(ast, script, this.chapter);
79+
}
80+
}

src/pyodide/evaluators/chapter1.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { IRunnerPlugin } from "@sourceacademy/conductor/runner";
2+
import { ChapterPyodideEvaluator } from "../PyodideEvaluator";
3+
4+
export default class PyodideEvaluator1 extends ChapterPyodideEvaluator {
5+
constructor(conductor: IRunnerPlugin) {
6+
super(conductor, 1);
7+
}
8+
}

src/pyodide/evaluators/chapter2.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { IRunnerPlugin } from "@sourceacademy/conductor/runner";
2+
import { ChapterPyodideEvaluator } from "../PyodideEvaluator";
3+
4+
export default class PyodideEvaluator2 extends ChapterPyodideEvaluator {
5+
constructor(conductor: IRunnerPlugin) {
6+
super(conductor, 2);
7+
}
8+
}

src/pyodide/evaluators/chapter3.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { IRunnerPlugin } from "@sourceacademy/conductor/runner";
2+
import { ChapterPyodideEvaluator } from "../PyodideEvaluator";
3+
4+
export default class PyodideEvaluator3 extends ChapterPyodideEvaluator {
5+
constructor(conductor: IRunnerPlugin) {
6+
super(conductor, 3);
7+
}
8+
}

src/pyodide/evaluators/chapter4.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { IRunnerPlugin } from "@sourceacademy/conductor/runner";
2+
import { ChapterPyodideEvaluator } from "../PyodideEvaluator";
3+
4+
export default class PyodideEvaluator4 extends ChapterPyodideEvaluator {
5+
constructor(conductor: IRunnerPlugin) {
6+
super(conductor, 4);
7+
}
8+
}

src/pyodide/evaluators/full.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { IRunnerPlugin } from "@sourceacademy/conductor/runner";
2+
import PyodideEvaluator from "../PyodideEvaluator";
3+
4+
export default class PyodideEvaluatorFull extends PyodideEvaluator {
5+
constructor(conductor: IRunnerPlugin) {
6+
super(conductor);
7+
}
8+
9+
protected validateChunk(_chunk: string): void {}
10+
}

src/pyodide/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export { default as PyodideEvaluator } from "./PyodideEvaluator";
2+
export { ChapterPyodideEvaluator } from "./PyodideEvaluator";
23
export { detectTorchImports, getNonTorchImportRoots, rewriteTorchImports } from "./importAnalyzer";

0 commit comments

Comments
 (0)