MCPcopy Index your code
hub / github.com/aiscriptdev/aiscript / generate

Method generate

aiscript-vm/src/compiler/codegen.rs:123–150  ·  view source on GitHub ↗
(
        program: Program<'gc>,
        ctx: Context<'gc>,
    )

Source from the content-addressed store, hash-verified

121 }
122
123 pub fn generate(
124 program: Program<'gc>,
125 ctx: Context<'gc>,
126 ) -> Result<HashMap<ChunkId, Function<'gc>>, VmError> {
127 // Reset CHUNK_ID initial value to get the same id for repeat compile
128 CHUNK_ID.store(0, Ordering::Relaxed);
129 let mut generator = Self::new(ctx, FunctionType::Script, "script");
130
131 for stmt in &program.statements {
132 generator.declare_functions(stmt)?;
133 }
134
135 for stmt in program.statements {
136 generator.generate_stmt(stmt)?;
137 }
138
139 generator.emit_return();
140
141 if generator.error_reporter.had_error {
142 Err(VmError::CompileError)
143 } else {
144 let function = mem::take(&mut generator.function);
145 generator
146 .chunks
147 .insert(CHUNK_ID.fetch_add(1, Ordering::AcqRel), function);
148 Ok(generator.chunks)
149 }
150 }
151
152 fn declare_functions(&mut self, stmt: &Stmt<'gc>) -> Result<(), VmError> {
153 match stmt {

Callers

nothing calls this directly

Calls 3

declare_functionsMethod · 0.80
generate_stmtMethod · 0.80
emit_returnMethod · 0.80

Tested by

no test coverage detected