Add lexical scope and redefining variables in functions (#3015)
* Fix to allow variable shadowing inside functions * Implement closures * Fix KCL test code to not reference future tag definition * Remove tag declarator from function parameters This is an example where the scoping change revealed a subtle issue with TagDeclarators. You cannot bind a new tag using a function parameter. The issue is that evaluating a TagDeclarator like $foo binds an identifier to its corresponding TagIdentifier, but returns the TagDeclarator. If you have a TagDeclarator passed in as a parameter to a function, you can never get its corresponding TagIdentifier. This seems like a case where TagDeclarator evaluation needs to be revisited, especially now that we have scoped tags. * Fix to query return, functions, and tag declarator AST nodes correctly
This commit is contained in:
@ -14,9 +14,7 @@ import {
|
||||
Program,
|
||||
ProgramMemory,
|
||||
recast,
|
||||
SketchGroup,
|
||||
SourceRange,
|
||||
ExtrudeGroup,
|
||||
} from 'lang/wasm'
|
||||
import { getNodeFromPath } from './queryAst'
|
||||
import { codeManager, editorManager, sceneInfra } from 'lib/singletons'
|
||||
@ -33,10 +31,7 @@ export class KclManager {
|
||||
},
|
||||
digest: null,
|
||||
}
|
||||
private _programMemory: ProgramMemory = {
|
||||
root: {},
|
||||
return: null,
|
||||
}
|
||||
private _programMemory: ProgramMemory = ProgramMemory.empty()
|
||||
private _logs: string[] = []
|
||||
private _kclErrors: KCLError[] = []
|
||||
private _isExecuting = false
|
||||
@ -505,10 +500,7 @@ function defaultSelectionFilter(
|
||||
programMemory: ProgramMemory,
|
||||
engineCommandManager: EngineCommandManager
|
||||
) {
|
||||
const firstSketchOrExtrudeGroup = Object.values(programMemory.root).find(
|
||||
(node) => node.type === 'ExtrudeGroup' || node.type === 'SketchGroup'
|
||||
) as SketchGroup | ExtrudeGroup
|
||||
firstSketchOrExtrudeGroup &&
|
||||
programMemory.hasSketchOrExtrudeGroup() &&
|
||||
engineCommandManager.sendSceneCommand({
|
||||
type: 'modeling_cmd_req',
|
||||
cmd_id: uuidv4(),
|
||||
|
Reference in New Issue
Block a user