diff --git a/src/cse-machine/interpreter.ts b/src/cse-machine/interpreter.ts index 6c0ac8f2a..253a3ec6b 100644 --- a/src/cse-machine/interpreter.ts +++ b/src/cse-machine/interpreter.ts @@ -60,6 +60,7 @@ import { checkStackOverFlow, createBlockEnvironment, createEnvironment, + createProgramEnvironment, currentEnvironment, declareFunctionsAndVariables, declareIdentifier, @@ -389,7 +390,7 @@ const cmdEvaluators: { [type: string]: CmdEvaluator } = { ) { // Create and push the environment only if it is non empty. if (hasDeclarations(command) || hasImportDeclarations(command)) { - const environment = createBlockEnvironment(context, 'programEnvironment') + const environment = createProgramEnvironment(context, isPrelude) pushEnvironment(context, environment) evaluateImports(command as unknown as es.Program, context, { wrapSourceModules: true, diff --git a/src/cse-machine/utils.ts b/src/cse-machine/utils.ts index 297c48f45..f1581806f 100644 --- a/src/cse-machine/utils.ts +++ b/src/cse-machine/utils.ts @@ -312,6 +312,19 @@ export const createBlockEnvironment = ( } } +export const createProgramEnvironment = ( + context: Context, + isPrelude: boolean, + head: Frame = {} +): Environment => { + return { + name: isPrelude ? 'prelude' : 'programEnvironment', + tail: currentEnvironment(context), + head, + id: uniqueId() + } +} + /** * Variables */