Skip to content

Commit de312aa

Browse files
committed
feat: Add line tracking to pest parser implementation
1 parent 523ffec commit de312aa

File tree

9 files changed

+144
-107
lines changed

9 files changed

+144
-107
lines changed

Cargo.lock

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ indexmap = "2.12.1"
3333
jiff = { version = "0.2", features = ["js"] }
3434
serde = { version = "1.0", features = ["derive"] }
3535
serde_json = "1.0"
36+
anyhow = { version = "1.0.100" }
3637

3738
[dev-dependencies]
3839
assert_cmd = "2"
@@ -41,9 +42,9 @@ pretty_assertions = { version = "1", features = ["unstable"] }
4142
tempfile = "3"
4243

4344

44-
[profile.release]
45-
strip = true # Automatically strip symbols from the binary.
46-
opt-level = "z" # Optimize for size.
47-
lto = true
48-
codegen-units = 1
49-
panic = "abort"
45+
#[profile.release]
46+
#strip = true # Automatically strip symbols from the binary.
47+
#opt-level = "z" # Optimize for size.
48+
#lto = true
49+
#codegen-units = 1
50+
#panic = "abort"

demo_codes/test.ch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1+
print(x + z)
12
let x = 5
23
let y = 3
3-
print(x + y)

docs/pkg/chen_lang.d.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl
88
export interface InitOutput {
99
readonly memory: WebAssembly.Memory;
1010
readonly run: (a: number, b: number) => void;
11-
readonly run_wasm: (a: number, b: number, c: number) => void;
12-
readonly __wbindgen_export: (a: number, b: number) => number;
13-
readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
14-
readonly __wbindgen_export3: (a: number) => void;
15-
readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
16-
readonly __wbindgen_export4: (a: number, b: number, c: number) => void;
11+
readonly run_wasm: (a: number, b: number) => [number, number];
12+
readonly __wbindgen_malloc: (a: number, b: number) => number;
13+
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
14+
readonly __wbindgen_exn_store: (a: number) => void;
15+
readonly __externref_table_alloc: () => number;
16+
readonly __wbindgen_externrefs: WebAssembly.Table;
17+
readonly __wbindgen_free: (a: number, b: number, c: number) => void;
18+
readonly __wbindgen_start: () => void;
1719
}
1820

1921
export type SyncInitInput = BufferSource | WebAssembly.Module;

docs/pkg/chen_lang.js

Lines changed: 33 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
11
let wasm;
22

3-
function addHeapObject(obj) {
4-
if (heap_next === heap.length) heap.push(heap.length + 1);
5-
const idx = heap_next;
6-
heap_next = heap[idx];
7-
8-
heap[idx] = obj;
3+
function addToExternrefTable0(obj) {
4+
const idx = wasm.__externref_table_alloc();
5+
wasm.__wbindgen_externrefs.set(idx, obj);
96
return idx;
107
}
118

12-
function dropObject(idx) {
13-
if (idx < 132) return;
14-
heap[idx] = heap_next;
15-
heap_next = idx;
16-
}
17-
189
let cachedDataViewMemory0 = null;
1910
function getDataViewMemory0() {
2011
if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
@@ -36,21 +27,15 @@ function getUint8ArrayMemory0() {
3627
return cachedUint8ArrayMemory0;
3728
}
3829

39-
function getObject(idx) { return heap[idx]; }
40-
4130
function handleError(f, args) {
4231
try {
4332
return f.apply(this, args);
4433
} catch (e) {
45-
wasm.__wbindgen_export3(addHeapObject(e));
34+
const idx = addToExternrefTable0(e);
35+
wasm.__wbindgen_exn_store(idx);
4636
}
4737
}
4838

49-
let heap = new Array(128).fill(undefined);
50-
heap.push(undefined, null, true, false);
51-
52-
let heap_next = heap.length;
53-
5439
function isLikeNone(x) {
5540
return x === undefined || x === null;
5641
}
@@ -92,12 +77,6 @@ function passStringToWasm0(arg, malloc, realloc) {
9277
return ptr;
9378
}
9479

95-
function takeObject(idx) {
96-
const ret = getObject(idx);
97-
dropObject(idx);
98-
return ret;
99-
}
100-
10180
let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
10281
cachedTextDecoder.decode();
10382
const MAX_SAFARI_DECODE_BYTES = 2146435072;
@@ -135,18 +114,14 @@ export function run_wasm(code) {
135114
let deferred2_0;
136115
let deferred2_1;
137116
try {
138-
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
139-
const ptr0 = passStringToWasm0(code, wasm.__wbindgen_export, wasm.__wbindgen_export2);
117+
const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
140118
const len0 = WASM_VECTOR_LEN;
141-
wasm.run_wasm(retptr, ptr0, len0);
142-
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
143-
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
144-
deferred2_0 = r0;
145-
deferred2_1 = r1;
146-
return getStringFromWasm0(r0, r1);
119+
const ret = wasm.run_wasm(ptr0, len0);
120+
deferred2_0 = ret[0];
121+
deferred2_1 = ret[1];
122+
return getStringFromWasm0(ret[0], ret[1]);
147123
} finally {
148-
wasm.__wbindgen_add_to_stack_pointer(16);
149-
wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);
124+
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
150125
}
151126
}
152127

@@ -186,9 +161,9 @@ function __wbg_get_imports() {
186161
const imports = {};
187162
imports.wbg = {};
188163
imports.wbg.__wbg___wbindgen_string_get_a2a31e16edf96e42 = function(arg0, arg1) {
189-
const obj = getObject(arg1);
164+
const obj = arg1;
190165
const ret = typeof(obj) === 'string' ? obj : undefined;
191-
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
166+
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
192167
var len1 = WASM_VECTOR_LEN;
193168
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
194169
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
@@ -197,40 +172,46 @@ function __wbg_get_imports() {
197172
throw new Error(getStringFromWasm0(arg0, arg1));
198173
};
199174
imports.wbg.__wbg_getTime_ad1e9878a735af08 = function(arg0) {
200-
const ret = getObject(arg0).getTime();
175+
const ret = arg0.getTime();
201176
return ret;
202177
};
203178
imports.wbg.__wbg_get_af9dab7e9603ea93 = function() { return handleError(function (arg0, arg1) {
204-
const ret = Reflect.get(getObject(arg0), getObject(arg1));
205-
return addHeapObject(ret);
179+
const ret = Reflect.get(arg0, arg1);
180+
return ret;
206181
}, arguments) };
207182
imports.wbg.__wbg_new_0_23cedd11d9b40c9d = function() {
208183
const ret = new Date();
209-
return addHeapObject(ret);
184+
return ret;
210185
};
211186
imports.wbg.__wbg_new_1ba21ce319a06297 = function() {
212187
const ret = new Object();
213-
return addHeapObject(ret);
188+
return ret;
214189
};
215190
imports.wbg.__wbg_new_25f239778d6112b9 = function() {
216191
const ret = new Array();
217-
return addHeapObject(ret);
192+
return ret;
218193
};
219194
imports.wbg.__wbg_new_dc8b69c32b416910 = function(arg0, arg1) {
220-
const ret = new Intl.DateTimeFormat(getObject(arg0), getObject(arg1));
221-
return addHeapObject(ret);
195+
const ret = new Intl.DateTimeFormat(arg0, arg1);
196+
return ret;
222197
};
223198
imports.wbg.__wbg_resolvedOptions_c5df09ec2900085b = function(arg0) {
224-
const ret = getObject(arg0).resolvedOptions();
225-
return addHeapObject(ret);
199+
const ret = arg0.resolvedOptions();
200+
return ret;
226201
};
227202
imports.wbg.__wbindgen_cast_2241b6af4c4b2941 = function(arg0, arg1) {
228203
// Cast intrinsic for `Ref(String) -> Externref`.
229204
const ret = getStringFromWasm0(arg0, arg1);
230-
return addHeapObject(ret);
205+
return ret;
231206
};
232-
imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
233-
takeObject(arg0);
207+
imports.wbg.__wbindgen_init_externref_table = function() {
208+
const table = wasm.__wbindgen_externrefs;
209+
const offset = table.grow(4);
210+
table.set(0, undefined);
211+
table.set(offset + 0, undefined);
212+
table.set(offset + 1, null);
213+
table.set(offset + 2, true);
214+
table.set(offset + 3, false);
234215
};
235216

236217
return imports;
@@ -243,7 +224,7 @@ function __wbg_finalize_init(instance, module) {
243224
cachedUint8ArrayMemory0 = null;
244225

245226

246-
227+
wasm.__wbindgen_start();
247228
return wasm;
248229
}
249230

docs/pkg/chen_lang_bg.wasm

29.1 KB
Binary file not shown.

docs/pkg/chen_lang_bg.wasm.d.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
/* eslint-disable */
33
export const memory: WebAssembly.Memory;
44
export const run: (a: number, b: number) => void;
5-
export const run_wasm: (a: number, b: number, c: number) => void;
6-
export const __wbindgen_export: (a: number, b: number) => number;
7-
export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
8-
export const __wbindgen_export3: (a: number) => void;
9-
export const __wbindgen_add_to_stack_pointer: (a: number) => number;
10-
export const __wbindgen_export4: (a: number, b: number, c: number) => void;
5+
export const run_wasm: (a: number, b: number) => [number, number];
6+
export const __wbindgen_malloc: (a: number, b: number) => number;
7+
export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
8+
export const __wbindgen_exn_store: (a: number) => void;
9+
export const __externref_table_alloc: () => number;
10+
export const __wbindgen_externrefs: WebAssembly.Table;
11+
export const __wbindgen_free: (a: number, b: number, c: number) => void;
12+
export const __wbindgen_start: () => void;

src/bin/chen_lang.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ enum SubCommand {
4141
},
4242
}
4343

44-
fn main() -> Result<(), Box<dyn std::error::Error>> {
44+
fn main() -> anyhow::Result<()> {
4545
let matches = Args::parse();
4646
let _ = tracing_subscriber::registry()
4747
.with(

0 commit comments

Comments
 (0)