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:
@ -1139,8 +1139,8 @@ export const modelingMachine = createMachine(
|
||||
)
|
||||
if (err(varDecNode)) return
|
||||
const sketchVar = varDecNode.node.declarations[0].id.name
|
||||
const sketchGroup = kclManager.programMemory.root[sketchVar]
|
||||
if (sketchGroup.type !== 'SketchGroup') return
|
||||
const sketchGroup = kclManager.programMemory.get(sketchVar)
|
||||
if (sketchGroup?.type !== 'SketchGroup') return
|
||||
const idArtifact = engineCommandManager.artifactMap[sketchGroup.id]
|
||||
if (idArtifact.commandType !== 'start_path') return
|
||||
const extrusionArtifactId = (idArtifact as any)?.extrusions?.[0]
|
||||
|
Reference in New Issue
Block a user