Merge branch 'main' into kurt-multi-profile-again
This commit is contained in:
		
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -17,7 +17,7 @@ lastSegX(sketch: Sketch) -> number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | A sketch is a collection of paths. | Yes |
 | 
			
		||||
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | The sketch whose line segment is being queried | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ lastSegY(sketch: Sketch) -> number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | A sketch is a collection of paths. | Yes |
 | 
			
		||||
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | The sketch whose line segment is being queried | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -57,3 +57,55 @@ Imported symbols can be renamed for convenience or to avoid name collisions.
 | 
			
		||||
```
 | 
			
		||||
import increment as inc, decrement as dec from "util.kcl"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Importing files from other CAD systems
 | 
			
		||||
 | 
			
		||||
`import` can also be used to import files from other CAD systems. The format of the statement is the
 | 
			
		||||
same as for KCL files. You can only import the whole file, not items from it. E.g.,
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
import "tests/inputs/cube.obj"
 | 
			
		||||
 | 
			
		||||
// Use `cube` just like a KCL object.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
import "tests/inputs/cube-2.sldprt" as cube
 | 
			
		||||
 | 
			
		||||
// Use `cube` just like a KCL object.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can make the file format explicit using a format attribute (useful if using a different
 | 
			
		||||
extension), e.g.,
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
@(format = obj)
 | 
			
		||||
import "tests/inputs/cube"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
For formats lacking unit data (such as STL, OBJ, or PLY files), the default
 | 
			
		||||
unit of measurement is millimeters. Alternatively you may specify the unit
 | 
			
		||||
by using an attirbute. Likewise, you can also specify a coordinate system. E.g.,
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
@(unitLength = ft, coords = opengl)
 | 
			
		||||
import "tests/inputs/cube.obj"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
When importing a GLTF file, the bin file will be imported as well.
 | 
			
		||||
 | 
			
		||||
Import paths are relative to the current project directory. Imports currently only work when
 | 
			
		||||
using the native Modeling App, not in the browser.
 | 
			
		||||
 | 
			
		||||
### Supported values
 | 
			
		||||
 | 
			
		||||
File formats: `fbx`, `gltf`/`glb`, `obj`+, `ply`+, `sldprt`, `step`/`stp`, `stl`+. (Those marked with a
 | 
			
		||||
'+' support customising the length unit and coordinate system).
 | 
			
		||||
 | 
			
		||||
Length units: `mm` (the default), `cm`, `m`, `inch`, `ft`, `yd`.
 | 
			
		||||
 | 
			
		||||
Coordinate systems:
 | 
			
		||||
 | 
			
		||||
- `zoo` (the default), forward: -Y, up: +Z, handedness: right
 | 
			
		||||
- `opengl`, forward: +Z, up: +Y, handedness: right
 | 
			
		||||
- `vulkan`, forward: +Z, up: -Y, handedness: left
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -17,7 +17,7 @@ segAng(tag: TagIdentifier) -> number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) |  | Yes |
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ segEnd(tag: TagIdentifier) -> [number]
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) |  | Yes |
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ segEndX(tag: TagIdentifier) -> number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) |  | Yes |
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ segEndY(tag: TagIdentifier) -> number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) |  | Yes |
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ segLen(tag: TagIdentifier) -> number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) |  | Yes |
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ segStart(tag: TagIdentifier) -> [number]
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) |  | Yes |
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ segStartX(tag: TagIdentifier) -> number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) |  | Yes |
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ segStartY(tag: TagIdentifier) -> number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) |  | Yes |
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6023
									
								
								docs/kcl/std.json
									
									
									
									
									
								
							
							
						
						
									
										6023
									
								
								docs/kcl/std.json
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -17,7 +17,7 @@ tangentToEnd(tag: TagIdentifier) -> number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) |  | Yes |
 | 
			
		||||
| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,7 @@
 | 
			
		||||
    "@fortawesome/react-fontawesome": "^0.2.0",
 | 
			
		||||
    "@headlessui/react": "^1.7.19",
 | 
			
		||||
    "@headlessui/tailwindcss": "^0.2.0",
 | 
			
		||||
    "@kittycad/lib": "2.0.13",
 | 
			
		||||
    "@kittycad/lib": "2.0.17",
 | 
			
		||||
    "@lezer/highlight": "^1.2.1",
 | 
			
		||||
    "@lezer/lr": "^1.4.1",
 | 
			
		||||
    "@react-hook/resize-observer": "^2.0.1",
 | 
			
		||||
@ -85,7 +85,7 @@
 | 
			
		||||
    "fmt": "prettier --write ./src *.ts *.json *.js ./e2e ./packages",
 | 
			
		||||
    "fmt-check": "prettier --check ./src *.ts *.json *.js ./e2e ./packages",
 | 
			
		||||
    "fetch:wasm": "./get-latest-wasm-bundle.sh",
 | 
			
		||||
    "fetch:samples": "echo \"Fetching latest KCL samples...\" && curl -o public/kcl-samples-manifest-fallback.json https://raw.githubusercontent.com/KittyCAD/kcl-samples/achalmers/kw-pattern/manifest.json",
 | 
			
		||||
    "fetch:samples": "echo \"Fetching latest KCL samples...\" && curl -o public/kcl-samples-manifest-fallback.json https://raw.githubusercontent.com/KittyCAD/kcl-samples/achalmers/kw-pattern-transform2/manifest.json",
 | 
			
		||||
    "isomorphic-copy-wasm": "(copy src/wasm-lib/pkg/wasm_lib_bg.wasm public || cp src/wasm-lib/pkg/wasm_lib_bg.wasm public)",
 | 
			
		||||
    "build:wasm-dev": "yarn wasm-prep && (cd src/wasm-lib && wasm-pack build --dev --target web --out-dir pkg && cargo test -p kcl-lib export_bindings) && yarn isomorphic-copy-wasm && yarn fmt",
 | 
			
		||||
    "build:wasm": "yarn wasm-prep && cd src/wasm-lib && wasm-pack build --release --target web --out-dir pkg && cargo test -p kcl-lib export_bindings && cd ../.. && yarn isomorphic-copy-wasm && yarn fmt",
 | 
			
		||||
 | 
			
		||||
@ -34,6 +34,13 @@
 | 
			
		||||
    "title": "Car Wheel Assembly",
 | 
			
		||||
    "description": "A car wheel assembly with a rotor, tire, and lug nuts."
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "file": "main.kcl",
 | 
			
		||||
    "pathFromProjectDirectoryToFirstFile": "cycloidal-gear/main.kcl",
 | 
			
		||||
    "multipleFiles": false,
 | 
			
		||||
    "title": "Cycloidal Gear",
 | 
			
		||||
    "description": "A cycloidal gear is a gear with a continuous, curved tooth profile. They are used in watchmaking and high precision robotics actuation"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "file": "main.kcl",
 | 
			
		||||
    "pathFromProjectDirectoryToFirstFile": "dodecahedron/main.kcl",
 | 
			
		||||
@ -48,6 +55,13 @@
 | 
			
		||||
    "title": "Enclosure",
 | 
			
		||||
    "description": "An enclosure body and sealing lid for storing items"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "file": "main.kcl",
 | 
			
		||||
    "pathFromProjectDirectoryToFirstFile": "exhaust-manifold/main.kcl",
 | 
			
		||||
    "multipleFiles": false,
 | 
			
		||||
    "title": "Exhaust Manifold",
 | 
			
		||||
    "description": "A welded exhaust header for an inline 4-cylinder engine"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "file": "main.kcl",
 | 
			
		||||
    "pathFromProjectDirectoryToFirstFile": "flange-with-patterns/main.kcl",
 | 
			
		||||
 | 
			
		||||
@ -1551,6 +1551,7 @@ export const ModelingMachineProvider = ({
 | 
			
		||||
            selections: input.selection,
 | 
			
		||||
            token,
 | 
			
		||||
            artifactGraph: engineCommandManager.artifactGraph,
 | 
			
		||||
            projectName: context.project.name,
 | 
			
		||||
          })
 | 
			
		||||
        }),
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
@ -32,7 +32,7 @@ child_process.spawnSync('git', [
 | 
			
		||||
  'clone',
 | 
			
		||||
  '--single-branch',
 | 
			
		||||
  '--branch',
 | 
			
		||||
  'achalmers/kw-pattern',
 | 
			
		||||
  'achalmers/kw-pattern-transform2',
 | 
			
		||||
  URL_GIT_KCL_SAMPLES,
 | 
			
		||||
  DIR_KCL_SAMPLES,
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,6 @@ import {
 | 
			
		||||
  modify_ast_for_sketch_wasm,
 | 
			
		||||
  is_points_ccw,
 | 
			
		||||
  get_tangential_arc_to_info,
 | 
			
		||||
  program_memory_init,
 | 
			
		||||
  make_default_planes,
 | 
			
		||||
  coredump,
 | 
			
		||||
  toml_stringify,
 | 
			
		||||
@ -43,9 +42,6 @@ import { DeepPartial } from 'lib/types'
 | 
			
		||||
import { ProjectConfiguration } from 'wasm-lib/kcl/bindings/ProjectConfiguration'
 | 
			
		||||
import { Sketch } from '../wasm-lib/kcl/bindings/Sketch'
 | 
			
		||||
import { ExecOutcome as RustExecOutcome } from 'wasm-lib/kcl/bindings/ExecOutcome'
 | 
			
		||||
import { ProgramMemory as RawProgramMemory } from '../wasm-lib/kcl/bindings/ProgramMemory'
 | 
			
		||||
import { EnvironmentRef } from '../wasm-lib/kcl/bindings/EnvironmentRef'
 | 
			
		||||
import { Environment } from '../wasm-lib/kcl/bindings/Environment'
 | 
			
		||||
import { Node } from 'wasm-lib/kcl/bindings/Node'
 | 
			
		||||
import { CompilationError } from 'wasm-lib/kcl/bindings/CompilationError'
 | 
			
		||||
import { SourceRange } from 'wasm-lib/kcl/bindings/SourceRange'
 | 
			
		||||
 | 
			
		||||
@ -40,10 +40,12 @@ export async function submitPromptToEditToQueue({
 | 
			
		||||
  code,
 | 
			
		||||
  token,
 | 
			
		||||
  artifactGraph,
 | 
			
		||||
  projectName,
 | 
			
		||||
}: {
 | 
			
		||||
  prompt: string
 | 
			
		||||
  selections: Selections
 | 
			
		||||
  code: string
 | 
			
		||||
  projectName: string
 | 
			
		||||
  token?: string
 | 
			
		||||
  artifactGraph: ArtifactGraph
 | 
			
		||||
}): Promise<Models['TextToCadIteration_type'] | Error> {
 | 
			
		||||
@ -157,6 +159,8 @@ See later source ranges for more context. about the sweep`,
 | 
			
		||||
    original_source_code: code,
 | 
			
		||||
    prompt,
 | 
			
		||||
    source_ranges: ranges,
 | 
			
		||||
    project_name:
 | 
			
		||||
      projectName !== '' && projectName !== 'browser' ? projectName : undefined,
 | 
			
		||||
  }
 | 
			
		||||
  const url = VITE_KC_API_BASE_URL + '/ml/text-to-cad/iteration'
 | 
			
		||||
  const data: Models['TextToCadIteration_type'] | Error =
 | 
			
		||||
@ -203,11 +207,13 @@ export async function doPromptEdit({
 | 
			
		||||
  code,
 | 
			
		||||
  token,
 | 
			
		||||
  artifactGraph,
 | 
			
		||||
  projectName,
 | 
			
		||||
}: {
 | 
			
		||||
  prompt: string
 | 
			
		||||
  selections: Selections
 | 
			
		||||
  code: string
 | 
			
		||||
  token?: string
 | 
			
		||||
  projectName: string
 | 
			
		||||
  artifactGraph: ArtifactGraph
 | 
			
		||||
}): Promise<Models['TextToCadIteration_type'] | Error> {
 | 
			
		||||
  const toastId = toast.loading('Submitting to Text-to-CAD API...')
 | 
			
		||||
@ -217,6 +223,7 @@ export async function doPromptEdit({
 | 
			
		||||
    code,
 | 
			
		||||
    token,
 | 
			
		||||
    artifactGraph,
 | 
			
		||||
    projectName,
 | 
			
		||||
  })
 | 
			
		||||
  if (err(submitResult)) return submitResult
 | 
			
		||||
 | 
			
		||||
@ -269,12 +276,14 @@ export async function promptToEditFlow({
 | 
			
		||||
  code,
 | 
			
		||||
  token,
 | 
			
		||||
  artifactGraph,
 | 
			
		||||
  projectName,
 | 
			
		||||
}: {
 | 
			
		||||
  prompt: string
 | 
			
		||||
  selections: Selections
 | 
			
		||||
  code: string
 | 
			
		||||
  token?: string
 | 
			
		||||
  artifactGraph: ArtifactGraph
 | 
			
		||||
  projectName: string
 | 
			
		||||
}) {
 | 
			
		||||
  const result = await doPromptEdit({
 | 
			
		||||
    prompt,
 | 
			
		||||
@ -282,6 +291,7 @@ export async function promptToEditFlow({
 | 
			
		||||
    code,
 | 
			
		||||
    token,
 | 
			
		||||
    artifactGraph,
 | 
			
		||||
    projectName,
 | 
			
		||||
  })
 | 
			
		||||
  if (err(result)) return Promise.reject(result)
 | 
			
		||||
  const oldCode = codeManager.code
 | 
			
		||||
 | 
			
		||||
@ -19,9 +19,14 @@ import { toSync } from './utils'
 | 
			
		||||
 | 
			
		||||
async function submitTextToCadPrompt(
 | 
			
		||||
  prompt: string,
 | 
			
		||||
  projectName: string,
 | 
			
		||||
  token?: string
 | 
			
		||||
): Promise<Models['TextToCad_type'] | Error> {
 | 
			
		||||
  const body: Models['TextToCadCreateBody_type'] = { prompt }
 | 
			
		||||
  const body: Models['TextToCadCreateBody_type'] = {
 | 
			
		||||
    prompt,
 | 
			
		||||
    project_name:
 | 
			
		||||
      projectName !== '' && projectName !== 'browser' ? projectName : undefined,
 | 
			
		||||
  }
 | 
			
		||||
  // Glb has a smaller footprint than gltf, should we want to render it.
 | 
			
		||||
  const url = VITE_KC_API_BASE_URL + '/ai/text-to-cad/glb?kcl=true'
 | 
			
		||||
  const data: Models['TextToCad_type'] | Error = await crossPlatformFetch(
 | 
			
		||||
@ -100,7 +105,11 @@ export async function submitAndAwaitTextToKcl({
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const textToCadQueued = await submitTextToCadPrompt(trimmedPrompt, token)
 | 
			
		||||
  const textToCadQueued = await submitTextToCadPrompt(
 | 
			
		||||
    trimmedPrompt,
 | 
			
		||||
    context.project.name,
 | 
			
		||||
    token
 | 
			
		||||
  )
 | 
			
		||||
    .then((value) => {
 | 
			
		||||
      if (value instanceof Error) {
 | 
			
		||||
        return Promise.reject(value)
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,6 @@ import {
 | 
			
		||||
  modify_ast_for_sketch_wasm as ModifyAstForSketch,
 | 
			
		||||
  is_points_ccw as IsPointsCcw,
 | 
			
		||||
  get_tangential_arc_to_info as GetTangentialArcToInfo,
 | 
			
		||||
  program_memory_init as ProgramMemoryInit,
 | 
			
		||||
  make_default_planes as MakeDefaultPlanes,
 | 
			
		||||
  coredump as CoreDump,
 | 
			
		||||
  toml_stringify as TomlStringify,
 | 
			
		||||
@ -80,9 +79,6 @@ export const get_tangential_arc_to_info: typeof GetTangentialArcToInfo = (
 | 
			
		||||
) => {
 | 
			
		||||
  return getModule().get_tangential_arc_to_info(...args)
 | 
			
		||||
}
 | 
			
		||||
export const program_memory_init: typeof ProgramMemoryInit = (...args) => {
 | 
			
		||||
  return getModule().program_memory_init(...args)
 | 
			
		||||
}
 | 
			
		||||
export const make_default_planes: typeof MakeDefaultPlanes = (...args) => {
 | 
			
		||||
  return getModule().make_default_planes(...args)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -442,7 +442,7 @@ fn do_stdlib_inner(
 | 
			
		||||
        #const_struct
 | 
			
		||||
 | 
			
		||||
        fn #boxed_fn_name_ident(
 | 
			
		||||
            exec_state: &mut crate::ExecState,
 | 
			
		||||
            exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
            args: crate::std::Args,
 | 
			
		||||
        ) -> std::pin::Pin<
 | 
			
		||||
            Box<dyn std::future::Future<Output = anyhow::Result<crate::execution::KclValue, crate::errors::KclError>> + Send + '_>,
 | 
			
		||||
@ -831,7 +831,7 @@ fn generate_code_block_test(fn_name: &str, code_block: &str, index: usize) -> pr
 | 
			
		||||
                context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            if let Err(e) = ctx.run(&program, &mut crate::ExecState::new(&ctx.settings)).await {
 | 
			
		||||
            if let Err(e) = ctx.run(&program, &mut crate::execution::ExecState::new(&ctx.settings)).await {
 | 
			
		||||
                    return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
                        error: e,
 | 
			
		||||
                        filename: format!("{}{}", #fn_name, #index),
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,10 @@ mod test_examples_someFn {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -67,7 +70,7 @@ pub(crate) struct SomeFn {}
 | 
			
		||||
#[doc = "Std lib function: someFn\nDocs"]
 | 
			
		||||
pub(crate) const SomeFn: SomeFn = SomeFn {};
 | 
			
		||||
fn boxed_someFn(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,10 @@ mod test_examples_someFn {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -67,7 +70,7 @@ pub(crate) struct SomeFn {}
 | 
			
		||||
#[doc = "Std lib function: someFn\nDocs"]
 | 
			
		||||
pub(crate) const SomeFn: SomeFn = SomeFn {};
 | 
			
		||||
fn boxed_someFn(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,10 @@ mod test_examples_show {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -73,7 +76,10 @@ mod test_examples_show {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -125,7 +131,7 @@ pub(crate) struct Show {}
 | 
			
		||||
#[doc = "Std lib function: show\nThis is some function.\nIt does shit."]
 | 
			
		||||
pub(crate) const Show: Show = Show {};
 | 
			
		||||
fn boxed_show(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,10 @@ mod test_examples_show {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -68,7 +71,7 @@ pub(crate) struct Show {}
 | 
			
		||||
#[doc = "Std lib function: show\nThis is some function.\nIt does shit."]
 | 
			
		||||
pub(crate) const Show: Show = Show {};
 | 
			
		||||
fn boxed_show(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,10 @@ mod test_examples_my_func {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -74,7 +77,10 @@ mod test_examples_my_func {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -126,7 +132,7 @@ pub(crate) struct MyFunc {}
 | 
			
		||||
#[doc = "Std lib function: myFunc\nThis is some function.\nIt does shit."]
 | 
			
		||||
pub(crate) const MyFunc: MyFunc = MyFunc {};
 | 
			
		||||
fn boxed_my_func(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,10 @@ mod test_examples_line_to {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -74,7 +77,10 @@ mod test_examples_line_to {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -126,7 +132,7 @@ pub(crate) struct LineTo {}
 | 
			
		||||
#[doc = "Std lib function: lineTo\nThis is some function.\nIt does shit."]
 | 
			
		||||
pub(crate) const LineTo: LineTo = LineTo {};
 | 
			
		||||
fn boxed_line_to(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,10 @@ mod test_examples_min {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -73,7 +76,10 @@ mod test_examples_min {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -125,7 +131,7 @@ pub(crate) struct Min {}
 | 
			
		||||
#[doc = "Std lib function: min\nThis is some function.\nIt does shit."]
 | 
			
		||||
pub(crate) const Min: Min = Min {};
 | 
			
		||||
fn boxed_min(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,10 @@ mod test_examples_show {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -68,7 +71,7 @@ pub(crate) struct Show {}
 | 
			
		||||
#[doc = "Std lib function: show\nThis is some function.\nIt does shit."]
 | 
			
		||||
pub(crate) const Show: Show = Show {};
 | 
			
		||||
fn boxed_show(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,10 @@ mod test_examples_import {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -68,7 +71,7 @@ pub(crate) struct Import {}
 | 
			
		||||
#[doc = "Std lib function: import\nThis is some function.\nIt does shit."]
 | 
			
		||||
pub(crate) const Import: Import = Import {};
 | 
			
		||||
fn boxed_import(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,10 @@ mod test_examples_import {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -68,7 +71,7 @@ pub(crate) struct Import {}
 | 
			
		||||
#[doc = "Std lib function: import\nThis is some function.\nIt does shit."]
 | 
			
		||||
pub(crate) const Import: Import = Import {};
 | 
			
		||||
fn boxed_import(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,10 @@ mod test_examples_import {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -68,7 +71,7 @@ pub(crate) struct Import {}
 | 
			
		||||
#[doc = "Std lib function: import\nThis is some function.\nIt does shit."]
 | 
			
		||||
pub(crate) const Import: Import = Import {};
 | 
			
		||||
fn boxed_import(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,10 @@ mod test_examples_show {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -68,7 +71,7 @@ pub(crate) struct Show {}
 | 
			
		||||
#[doc = "Std lib function: show\nThis is some function.\nIt does shit."]
 | 
			
		||||
pub(crate) const Show: Show = Show {};
 | 
			
		||||
fn boxed_show(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,10 @@ mod test_examples_some_function {
 | 
			
		||||
            context_type: crate::execution::ContextType::Mock,
 | 
			
		||||
        };
 | 
			
		||||
        if let Err(e) = ctx
 | 
			
		||||
            .run(&program, &mut crate::ExecState::new(&ctx.settings))
 | 
			
		||||
            .run(
 | 
			
		||||
                &program,
 | 
			
		||||
                &mut crate::execution::ExecState::new(&ctx.settings),
 | 
			
		||||
            )
 | 
			
		||||
            .await
 | 
			
		||||
        {
 | 
			
		||||
            return Err(miette::Report::new(crate::errors::Report {
 | 
			
		||||
@ -67,7 +70,7 @@ pub(crate) struct SomeFunction {}
 | 
			
		||||
#[doc = "Std lib function: someFunction\nDocs"]
 | 
			
		||||
pub(crate) const SomeFunction: SomeFunction = SomeFunction {};
 | 
			
		||||
fn boxed_some_function(
 | 
			
		||||
    exec_state: &mut crate::ExecState,
 | 
			
		||||
    exec_state: &mut crate::execution::ExecState,
 | 
			
		||||
    args: crate::std::Args,
 | 
			
		||||
) -> std::pin::Pin<
 | 
			
		||||
    Box<
 | 
			
		||||
 | 
			
		||||
@ -31,12 +31,12 @@ impl From<KclErrorWithOutputs> for ExecError {
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
pub struct ExecErrorWithState {
 | 
			
		||||
    pub error: ExecError,
 | 
			
		||||
    pub exec_state: Option<crate::ExecState>,
 | 
			
		||||
    pub exec_state: Option<crate::execution::ExecState>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl ExecErrorWithState {
 | 
			
		||||
    #[cfg_attr(target_arch = "wasm32", expect(dead_code))]
 | 
			
		||||
    pub fn new(error: ExecError, exec_state: crate::ExecState) -> Self {
 | 
			
		||||
    pub fn new(error: ExecError, exec_state: crate::execution::ExecState) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            error,
 | 
			
		||||
            exec_state: Some(exec_state),
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,10 @@
 | 
			
		||||
//! Data on available annotations.
 | 
			
		||||
 | 
			
		||||
use super::kcl_value::{UnitAngle, UnitLen};
 | 
			
		||||
use kittycad_modeling_cmds::coord::{System, KITTYCAD, OPENGL, VULKAN};
 | 
			
		||||
 | 
			
		||||
use crate::{
 | 
			
		||||
    errors::KclErrorDetails,
 | 
			
		||||
    execution::kcl_value::{UnitAngle, UnitLen},
 | 
			
		||||
    parsing::ast::types::{Expr, Node, NonCodeValue, ObjectProperty},
 | 
			
		||||
    KclError, SourceRange,
 | 
			
		||||
};
 | 
			
		||||
@ -11,6 +13,12 @@ pub(crate) const SETTINGS: &str = "settings";
 | 
			
		||||
pub(crate) const SETTINGS_UNIT_LENGTH: &str = "defaultLengthUnit";
 | 
			
		||||
pub(crate) const SETTINGS_UNIT_ANGLE: &str = "defaultAngleUnit";
 | 
			
		||||
pub(super) const NO_PRELUDE: &str = "no_prelude";
 | 
			
		||||
pub(super) const IMPORT_FORMAT: &str = "format";
 | 
			
		||||
pub(super) const IMPORT_FORMAT_VALUES: [&str; 9] = ["fbx", "gltf", "glb", "obj", "ply", "sldprt", "stp", "step", "stl"];
 | 
			
		||||
pub(super) const IMPORT_COORDS: &str = "coords";
 | 
			
		||||
pub(super) const IMPORT_COORDS_VALUES: [(&str, &System); 3] =
 | 
			
		||||
    [("zoo", KITTYCAD), ("opengl", OPENGL), ("vulkan", VULKAN)];
 | 
			
		||||
pub(super) const IMPORT_LENGTH_UNIT: &str = "lengthUnit";
 | 
			
		||||
 | 
			
		||||
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
 | 
			
		||||
pub(super) enum AnnotationScope {
 | 
			
		||||
@ -36,6 +44,18 @@ pub(super) fn expect_properties<'a>(
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub(super) fn unnamed_properties<'a>(
 | 
			
		||||
    annotations: impl Iterator<Item = &'a NonCodeValue>,
 | 
			
		||||
) -> Option<&'a [Node<ObjectProperty>]> {
 | 
			
		||||
    for annotation in annotations {
 | 
			
		||||
        if let NonCodeValue::Annotation { name: None, properties } = annotation {
 | 
			
		||||
            return properties.as_deref();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    None
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub(super) fn expect_ident(expr: &Expr) -> Result<&str, KclError> {
 | 
			
		||||
    match expr {
 | 
			
		||||
        Expr::Identifier(id) => Ok(&id.name),
 | 
			
		||||
@ -57,7 +77,7 @@ impl UnitLen {
 | 
			
		||||
            "yd" => Ok(UnitLen::Yards),
 | 
			
		||||
            value => Err(KclError::Semantic(KclErrorDetails {
 | 
			
		||||
                message: format!(
 | 
			
		||||
                    "Unexpected settings value: `{value}`; expected one of `mm`, `cm`, `m`, `inch`, `ft`, `yd`"
 | 
			
		||||
                    "Unexpected value for length units: `{value}`; expected one of `mm`, `cm`, `m`, `inch`, `ft`, `yd`"
 | 
			
		||||
                ),
 | 
			
		||||
                source_ranges: vec![source_range],
 | 
			
		||||
            })),
 | 
			
		||||
@ -71,7 +91,7 @@ impl UnitAngle {
 | 
			
		||||
            "deg" => Ok(UnitAngle::Degrees),
 | 
			
		||||
            "rad" => Ok(UnitAngle::Radians),
 | 
			
		||||
            value => Err(KclError::Semantic(KclErrorDetails {
 | 
			
		||||
                message: format!("Unexpected settings value: `{value}`; expected one of `deg`, `rad`"),
 | 
			
		||||
                message: format!("Unexpected value for angle units: `{value}`; expected one of `deg`, `rad`"),
 | 
			
		||||
                source_ranges: vec![source_range],
 | 
			
		||||
            })),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -6,13 +6,11 @@ use itertools::{EitherOrBoth, Itertools};
 | 
			
		||||
use tokio::sync::RwLock;
 | 
			
		||||
 | 
			
		||||
use crate::{
 | 
			
		||||
    execution::{ExecState, ExecutorSettings},
 | 
			
		||||
    execution::{memory::ProgramMemory, ExecState, ExecutorSettings},
 | 
			
		||||
    parsing::ast::types::{Node, NonCodeValue, Program},
 | 
			
		||||
    walk::Node as WalkNode,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use super::ProgramMemory;
 | 
			
		||||
 | 
			
		||||
lazy_static::lazy_static! {
 | 
			
		||||
    /// A static mutable lock for updating the last successful execution state for the cache.
 | 
			
		||||
    static ref OLD_AST: Arc<RwLock<Option<OldAstState>>> = Default::default();
 | 
			
		||||
 | 
			
		||||
@ -10,16 +10,17 @@ use crate::{
 | 
			
		||||
        annotations,
 | 
			
		||||
        cad_op::{OpArg, Operation},
 | 
			
		||||
        memory,
 | 
			
		||||
        memory::ProgramMemory,
 | 
			
		||||
        state::ModuleState,
 | 
			
		||||
        BodyType, EnvironmentRef, ExecState, ExecutorContext, KclValue, MemoryFunction, Metadata, ProgramMemory,
 | 
			
		||||
        TagEngineInfo, TagIdentifier,
 | 
			
		||||
        BodyType, EnvironmentRef, ExecState, ExecutorContext, KclValue, MemoryFunction, Metadata, TagEngineInfo,
 | 
			
		||||
        TagIdentifier,
 | 
			
		||||
    },
 | 
			
		||||
    modules::{ModuleId, ModulePath, ModuleRepr},
 | 
			
		||||
    parsing::ast::types::{
 | 
			
		||||
        ArrayExpression, ArrayRangeExpression, BinaryExpression, BinaryOperator, BinaryPart, BodyItem, CallExpression,
 | 
			
		||||
        CallExpressionKw, Expr, FunctionExpression, IfExpression, ImportPath, ImportSelector, ItemVisibility,
 | 
			
		||||
        LiteralIdentifier, LiteralValue, MemberExpression, MemberObject, Node, NodeRef, NonCodeValue, ObjectExpression,
 | 
			
		||||
        PipeExpression, Program, TagDeclarator, UnaryExpression, UnaryOperator,
 | 
			
		||||
        LiteralIdentifier, LiteralValue, MemberExpression, MemberObject, Node, NodeRef, NonCodeNode, NonCodeValue,
 | 
			
		||||
        ObjectExpression, PipeExpression, Program, TagDeclarator, UnaryExpression, UnaryOperator,
 | 
			
		||||
    },
 | 
			
		||||
    source_range::SourceRange,
 | 
			
		||||
    std::{
 | 
			
		||||
@ -110,7 +111,10 @@ impl ExecutorContext {
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    let source_range = SourceRange::from(import_stmt);
 | 
			
		||||
                    let module_id = self.open_module(&import_stmt.path, exec_state, source_range).await?;
 | 
			
		||||
                    let meta_nodes = program.non_code_meta.get(i);
 | 
			
		||||
                    let module_id = self
 | 
			
		||||
                        .open_module(&import_stmt.path, meta_nodes, exec_state, source_range)
 | 
			
		||||
                        .await?;
 | 
			
		||||
 | 
			
		||||
                    match &import_stmt.selector {
 | 
			
		||||
                        ImportSelector::List { items } => {
 | 
			
		||||
@ -205,13 +209,7 @@ impl ExecutorContext {
 | 
			
		||||
                    let source_range = SourceRange::from(&variable_declaration.declaration.init);
 | 
			
		||||
                    let metadata = Metadata { source_range };
 | 
			
		||||
 | 
			
		||||
                    let _meta_nodes = if i == 0 {
 | 
			
		||||
                        &program.non_code_meta.start_nodes
 | 
			
		||||
                    } else if let Some(meta) = program.non_code_meta.non_code_nodes.get(&(i - 1)) {
 | 
			
		||||
                        meta
 | 
			
		||||
                    } else {
 | 
			
		||||
                        &Vec::new()
 | 
			
		||||
                    };
 | 
			
		||||
                    let _meta_nodes = program.non_code_meta.get(i);
 | 
			
		||||
 | 
			
		||||
                    let memory_item = self
 | 
			
		||||
                        .execute_expr(
 | 
			
		||||
@ -281,6 +279,7 @@ impl ExecutorContext {
 | 
			
		||||
    async fn open_module(
 | 
			
		||||
        &self,
 | 
			
		||||
        path: &ImportPath,
 | 
			
		||||
        non_code_meta: &[Node<NonCodeNode>],
 | 
			
		||||
        exec_state: &mut ExecState,
 | 
			
		||||
        source_range: SourceRange,
 | 
			
		||||
    ) -> Result<ModuleId, KclError> {
 | 
			
		||||
@ -307,9 +306,9 @@ impl ExecutorContext {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                let id = exec_state.next_module_id();
 | 
			
		||||
                let geom =
 | 
			
		||||
                    super::import::import_foreign(resolved_path.expect_path(), None, exec_state, self, source_range)
 | 
			
		||||
                        .await?;
 | 
			
		||||
                let path = resolved_path.expect_path();
 | 
			
		||||
                let format = super::import::format_from_annotations(non_code_meta, path, source_range)?;
 | 
			
		||||
                let geom = super::import::import_foreign(path, format, exec_state, self, source_range).await?;
 | 
			
		||||
                exec_state.add_module(id, resolved_path, ModuleRepr::Foreign(geom));
 | 
			
		||||
                Ok(id)
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@ use std::{ffi::OsStr, path::Path, str::FromStr};
 | 
			
		||||
 | 
			
		||||
use anyhow::Result;
 | 
			
		||||
use kcmc::{
 | 
			
		||||
    coord::{Axis, AxisDirectionPair, Direction, System},
 | 
			
		||||
    coord::{System, KITTYCAD},
 | 
			
		||||
    each_cmd as mcmd,
 | 
			
		||||
    format::InputFormat,
 | 
			
		||||
    ok_response::OkModelingCmdResponse,
 | 
			
		||||
@ -15,11 +15,11 @@ use kittycad_modeling_cmds as kcmc;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
use uuid::Uuid;
 | 
			
		||||
 | 
			
		||||
use super::ExecutorContext;
 | 
			
		||||
use crate::{
 | 
			
		||||
    errors::{KclError, KclErrorDetails},
 | 
			
		||||
    execution::{ExecState, ImportedGeometry},
 | 
			
		||||
    execution::{annotations, kcl_value::UnitLen, ExecState, ExecutorContext, ImportedGeometry},
 | 
			
		||||
    fs::FileSystem,
 | 
			
		||||
    parsing::ast::types::{Node, NonCodeNode},
 | 
			
		||||
    source_range::SourceRange,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -28,16 +28,7 @@ use crate::{
 | 
			
		||||
// * Forward: -Y
 | 
			
		||||
// * Up: +Z
 | 
			
		||||
// * Handedness: Right
 | 
			
		||||
pub const ZOO_COORD_SYSTEM: System = System {
 | 
			
		||||
    forward: AxisDirectionPair {
 | 
			
		||||
        axis: Axis::Y,
 | 
			
		||||
        direction: Direction::Negative,
 | 
			
		||||
    },
 | 
			
		||||
    up: AxisDirectionPair {
 | 
			
		||||
        axis: Axis::Z,
 | 
			
		||||
        direction: Direction::Positive,
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
pub const ZOO_COORD_SYSTEM: System = *KITTYCAD;
 | 
			
		||||
 | 
			
		||||
pub async fn import_foreign(
 | 
			
		||||
    file_path: &Path,
 | 
			
		||||
@ -54,18 +45,19 @@ pub async fn import_foreign(
 | 
			
		||||
        }));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let ext_format = get_import_format_from_extension(file_path.extension().ok_or_else(|| {
 | 
			
		||||
        KclError::Semantic(KclErrorDetails {
 | 
			
		||||
            message: format!("No file extension found for `{}`", file_path.display()),
 | 
			
		||||
            source_ranges: vec![source_range],
 | 
			
		||||
        })
 | 
			
		||||
    })?)
 | 
			
		||||
    .map_err(|e| {
 | 
			
		||||
        KclError::Semantic(KclErrorDetails {
 | 
			
		||||
            message: e.to_string(),
 | 
			
		||||
            source_ranges: vec![source_range],
 | 
			
		||||
        })
 | 
			
		||||
    })?;
 | 
			
		||||
    let ext_format =
 | 
			
		||||
        get_import_format_from_extension(file_path.extension().and_then(OsStr::to_str).ok_or_else(|| {
 | 
			
		||||
            KclError::Semantic(KclErrorDetails {
 | 
			
		||||
                message: format!("No file extension found for `{}`", file_path.display()),
 | 
			
		||||
                source_ranges: vec![source_range],
 | 
			
		||||
            })
 | 
			
		||||
        })?)
 | 
			
		||||
        .map_err(|e| {
 | 
			
		||||
            KclError::Semantic(KclErrorDetails {
 | 
			
		||||
                message: e.to_string(),
 | 
			
		||||
                source_ranges: vec![source_range],
 | 
			
		||||
            })
 | 
			
		||||
        })?;
 | 
			
		||||
 | 
			
		||||
    // Get the format type from the extension of the file.
 | 
			
		||||
    let format = if let Some(format) = format {
 | 
			
		||||
@ -162,6 +154,131 @@ pub async fn import_foreign(
 | 
			
		||||
    })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub(super) fn format_from_annotations(
 | 
			
		||||
    non_code_meta: &[Node<NonCodeNode>],
 | 
			
		||||
    path: &Path,
 | 
			
		||||
    import_source_range: SourceRange,
 | 
			
		||||
) -> Result<Option<InputFormat>, KclError> {
 | 
			
		||||
    let Some(props) = annotations::unnamed_properties(non_code_meta.iter().map(|n| &n.value)) else {
 | 
			
		||||
        return Ok(None);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    let mut result = None;
 | 
			
		||||
    for p in props {
 | 
			
		||||
        if p.key.name == annotations::IMPORT_FORMAT {
 | 
			
		||||
            result = Some(
 | 
			
		||||
                get_import_format_from_extension(annotations::expect_ident(&p.value)?).map_err(|_| {
 | 
			
		||||
                    KclError::Semantic(KclErrorDetails {
 | 
			
		||||
                        message: format!(
 | 
			
		||||
                            "Unknown format for import, expected one of: {}",
 | 
			
		||||
                            annotations::IMPORT_FORMAT_VALUES.join(", ")
 | 
			
		||||
                        ),
 | 
			
		||||
                        source_ranges: vec![p.as_source_range()],
 | 
			
		||||
                    })
 | 
			
		||||
                })?,
 | 
			
		||||
            );
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let mut result = result
 | 
			
		||||
        .or_else(|| {
 | 
			
		||||
            path.extension()
 | 
			
		||||
                .and_then(OsStr::to_str)
 | 
			
		||||
                .and_then(|ext| get_import_format_from_extension(ext).ok())
 | 
			
		||||
        })
 | 
			
		||||
        .ok_or(KclError::Semantic(KclErrorDetails {
 | 
			
		||||
            message: "Unknown or missing extension, and no specified format for imported file".to_owned(),
 | 
			
		||||
            source_ranges: vec![import_source_range],
 | 
			
		||||
        }))?;
 | 
			
		||||
 | 
			
		||||
    for p in props {
 | 
			
		||||
        match p.key.name.as_str() {
 | 
			
		||||
            annotations::IMPORT_COORDS => {
 | 
			
		||||
                set_coords(&mut result, annotations::expect_ident(&p.value)?, p.as_source_range())?;
 | 
			
		||||
            }
 | 
			
		||||
            annotations::IMPORT_LENGTH_UNIT => {
 | 
			
		||||
                set_length_unit(&mut result, annotations::expect_ident(&p.value)?, p.as_source_range())?;
 | 
			
		||||
            }
 | 
			
		||||
            annotations::IMPORT_FORMAT => {}
 | 
			
		||||
            _ => {
 | 
			
		||||
                return Err(KclError::Semantic(KclErrorDetails {
 | 
			
		||||
                    message: format!(
 | 
			
		||||
                        "Unexpected annotation for import, expected one of: {}, {}, {}",
 | 
			
		||||
                        annotations::IMPORT_FORMAT,
 | 
			
		||||
                        annotations::IMPORT_COORDS,
 | 
			
		||||
                        annotations::IMPORT_LENGTH_UNIT
 | 
			
		||||
                    ),
 | 
			
		||||
                    source_ranges: vec![p.as_source_range()],
 | 
			
		||||
                }))
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Ok(Some(result))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn set_coords(fmt: &mut InputFormat, coords_str: &str, source_range: SourceRange) -> Result<(), KclError> {
 | 
			
		||||
    let mut coords = None;
 | 
			
		||||
    for (name, val) in annotations::IMPORT_COORDS_VALUES {
 | 
			
		||||
        if coords_str == name {
 | 
			
		||||
            coords = Some(*val);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let Some(coords) = coords else {
 | 
			
		||||
        return Err(KclError::Semantic(KclErrorDetails {
 | 
			
		||||
            message: format!(
 | 
			
		||||
                "Unknown coordinate system: {coords_str}, expected one of: {}",
 | 
			
		||||
                annotations::IMPORT_COORDS_VALUES
 | 
			
		||||
                    .iter()
 | 
			
		||||
                    .map(|(n, _)| *n)
 | 
			
		||||
                    .collect::<Vec<_>>()
 | 
			
		||||
                    .join(", ")
 | 
			
		||||
            ),
 | 
			
		||||
            source_ranges: vec![source_range],
 | 
			
		||||
        }));
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    match fmt {
 | 
			
		||||
        InputFormat::Obj(opts) => opts.coords = coords,
 | 
			
		||||
        InputFormat::Ply(opts) => opts.coords = coords,
 | 
			
		||||
        InputFormat::Stl(opts) => opts.coords = coords,
 | 
			
		||||
        _ => {
 | 
			
		||||
            return Err(KclError::Semantic(KclErrorDetails {
 | 
			
		||||
                message: format!(
 | 
			
		||||
                    "`{}` option cannot be applied to the specified format",
 | 
			
		||||
                    annotations::IMPORT_COORDS
 | 
			
		||||
                ),
 | 
			
		||||
                source_ranges: vec![source_range],
 | 
			
		||||
            }))
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn set_length_unit(fmt: &mut InputFormat, units_str: &str, source_range: SourceRange) -> Result<(), KclError> {
 | 
			
		||||
    let units = UnitLen::from_str(units_str, source_range)?;
 | 
			
		||||
 | 
			
		||||
    match fmt {
 | 
			
		||||
        InputFormat::Obj(opts) => opts.units = units.into(),
 | 
			
		||||
        InputFormat::Ply(opts) => opts.units = units.into(),
 | 
			
		||||
        InputFormat::Stl(opts) => opts.units = units.into(),
 | 
			
		||||
        _ => {
 | 
			
		||||
            return Err(KclError::Semantic(KclErrorDetails {
 | 
			
		||||
                message: format!(
 | 
			
		||||
                    "`{}` option cannot be applied to the specified format",
 | 
			
		||||
                    annotations::IMPORT_LENGTH_UNIT
 | 
			
		||||
                ),
 | 
			
		||||
                source_ranges: vec![source_range],
 | 
			
		||||
            }))
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
 | 
			
		||||
pub struct PreImportedGeometry {
 | 
			
		||||
    id: Uuid,
 | 
			
		||||
@ -201,10 +318,7 @@ pub async fn send_to_engine(pre: PreImportedGeometry, ctxt: &ExecutorContext) ->
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Get the source format from the extension.
 | 
			
		||||
fn get_import_format_from_extension(ext: &OsStr) -> Result<InputFormat> {
 | 
			
		||||
    let ext = ext
 | 
			
		||||
        .to_str()
 | 
			
		||||
        .ok_or_else(|| anyhow::anyhow!("Invalid file extension: `{ext:?}`"))?;
 | 
			
		||||
fn get_import_format_from_extension(ext: &str) -> Result<InputFormat> {
 | 
			
		||||
    let format = match FileImportFormat::from_str(ext) {
 | 
			
		||||
        Ok(format) => format,
 | 
			
		||||
        Err(_) => {
 | 
			
		||||
@ -291,3 +405,130 @@ fn get_name_of_format(type_: InputFormat) -> &'static str {
 | 
			
		||||
        InputFormat::Stl(_) => "stl",
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod test {
 | 
			
		||||
    use super::*;
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn annotations() {
 | 
			
		||||
        // no annotations
 | 
			
		||||
        assert!(
 | 
			
		||||
            format_from_annotations(&[], Path::new("../foo.txt"), SourceRange::default(),)
 | 
			
		||||
                .unwrap()
 | 
			
		||||
                .is_none()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // no format, no options
 | 
			
		||||
        let text = "@()\nimport '../foo.gltf' as foo";
 | 
			
		||||
        let parsed = crate::Program::parse_no_errs(text).unwrap().ast;
 | 
			
		||||
        let non_code_meta = parsed.non_code_meta.get(0);
 | 
			
		||||
        let fmt = format_from_annotations(non_code_meta, Path::new("../foo.gltf"), SourceRange::default())
 | 
			
		||||
            .unwrap()
 | 
			
		||||
            .unwrap();
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            fmt,
 | 
			
		||||
            InputFormat::Gltf(kittycad_modeling_cmds::format::gltf::import::Options {})
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // format, no options
 | 
			
		||||
        let text = "@(format = gltf)\nimport '../foo.txt' as foo";
 | 
			
		||||
        let parsed = crate::Program::parse_no_errs(text).unwrap().ast;
 | 
			
		||||
        let non_code_meta = parsed.non_code_meta.get(0);
 | 
			
		||||
        let fmt = format_from_annotations(non_code_meta, Path::new("../foo.txt"), SourceRange::default())
 | 
			
		||||
            .unwrap()
 | 
			
		||||
            .unwrap();
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            fmt,
 | 
			
		||||
            InputFormat::Gltf(kittycad_modeling_cmds::format::gltf::import::Options {})
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // format, no extension (wouldn't parse but might some day)
 | 
			
		||||
        let fmt = format_from_annotations(non_code_meta, Path::new("../foo"), SourceRange::default())
 | 
			
		||||
            .unwrap()
 | 
			
		||||
            .unwrap();
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            fmt,
 | 
			
		||||
            InputFormat::Gltf(kittycad_modeling_cmds::format::gltf::import::Options {})
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // format, options
 | 
			
		||||
        let text = "@(format = obj, coords = vulkan, lengthUnit = ft)\nimport '../foo.txt' as foo";
 | 
			
		||||
        let parsed = crate::Program::parse_no_errs(text).unwrap().ast;
 | 
			
		||||
        let non_code_meta = parsed.non_code_meta.get(0);
 | 
			
		||||
        let fmt = format_from_annotations(non_code_meta, Path::new("../foo.txt"), SourceRange::default())
 | 
			
		||||
            .unwrap()
 | 
			
		||||
            .unwrap();
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            fmt,
 | 
			
		||||
            InputFormat::Obj(kittycad_modeling_cmds::format::obj::import::Options {
 | 
			
		||||
                coords: *kittycad_modeling_cmds::coord::VULKAN,
 | 
			
		||||
                units: kittycad_modeling_cmds::units::UnitLength::Feet,
 | 
			
		||||
            })
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // no format, options
 | 
			
		||||
        let text = "@(coords = vulkan, lengthUnit = ft)\nimport '../foo.obj' as foo";
 | 
			
		||||
        let parsed = crate::Program::parse_no_errs(text).unwrap().ast;
 | 
			
		||||
        let non_code_meta = parsed.non_code_meta.get(0);
 | 
			
		||||
        let fmt = format_from_annotations(non_code_meta, Path::new("../foo.obj"), SourceRange::default())
 | 
			
		||||
            .unwrap()
 | 
			
		||||
            .unwrap();
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            fmt,
 | 
			
		||||
            InputFormat::Obj(kittycad_modeling_cmds::format::obj::import::Options {
 | 
			
		||||
                coords: *kittycad_modeling_cmds::coord::VULKAN,
 | 
			
		||||
                units: kittycad_modeling_cmds::units::UnitLength::Feet,
 | 
			
		||||
            })
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // err - format, options, but no options for specified format
 | 
			
		||||
        assert_annotation_error(
 | 
			
		||||
            "@(format = gltf, lengthUnit = ft)\nimport '../foo.txt' as foo",
 | 
			
		||||
            "../foo.txt",
 | 
			
		||||
            "`lengthUnit` option cannot be applied",
 | 
			
		||||
        );
 | 
			
		||||
        // err - no format, options, but no options for specified format
 | 
			
		||||
        assert_annotation_error(
 | 
			
		||||
            "@(lengthUnit = ft)\nimport '../foo.gltf' as foo",
 | 
			
		||||
            "../foo.gltf",
 | 
			
		||||
            "lengthUnit` option cannot be applied",
 | 
			
		||||
        );
 | 
			
		||||
        // err - bad option
 | 
			
		||||
        assert_annotation_error(
 | 
			
		||||
            "@(format = obj, coords = vulkan, lengthUni = ft)\nimport '../foo.txt' as foo",
 | 
			
		||||
            "../foo.txt",
 | 
			
		||||
            "Unexpected annotation",
 | 
			
		||||
        );
 | 
			
		||||
        // err - bad format
 | 
			
		||||
        assert_annotation_error(
 | 
			
		||||
            "@(format = foo)\nimport '../foo.txt' as foo",
 | 
			
		||||
            "../foo.txt",
 | 
			
		||||
            "Unknown format for import",
 | 
			
		||||
        );
 | 
			
		||||
        // err - bad coord value
 | 
			
		||||
        assert_annotation_error(
 | 
			
		||||
            "@(format = gltf, coords = north)\nimport '../foo.txt' as foo",
 | 
			
		||||
            "../foo.txt",
 | 
			
		||||
            "Unknown coordinate system",
 | 
			
		||||
        );
 | 
			
		||||
        // err - bad unit value
 | 
			
		||||
        assert_annotation_error(
 | 
			
		||||
            "@(format = gltf, lengthUnit = gallons)\nimport '../foo.txt' as foo",
 | 
			
		||||
            "../foo.txt",
 | 
			
		||||
            "Unexpected value for length units",
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[track_caller]
 | 
			
		||||
    fn assert_annotation_error(src: &str, path: &str, expected: &str) {
 | 
			
		||||
        let parsed = crate::Program::parse_no_errs(src).unwrap().ast;
 | 
			
		||||
        let non_code_meta = parsed.non_code_meta.get(0);
 | 
			
		||||
        let err = format_from_annotations(non_code_meta, Path::new(path), SourceRange::default()).unwrap_err();
 | 
			
		||||
        assert!(
 | 
			
		||||
            err.message().contains(expected),
 | 
			
		||||
            "Expected: `{expected}`, found `{}`",
 | 
			
		||||
            err.message()
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -8,14 +8,15 @@ use crate::{
 | 
			
		||||
    errors::KclErrorDetails,
 | 
			
		||||
    exec::Sketch,
 | 
			
		||||
    execution::{
 | 
			
		||||
        Face, Helix, ImportedGeometry, MemoryFunction, Metadata, Plane, SketchSet, Solid, SolidSet, TagIdentifier,
 | 
			
		||||
        ExecState, Face, Helix, ImportedGeometry, MemoryFunction, Metadata, Plane, SketchSet, Solid, SolidSet,
 | 
			
		||||
        TagIdentifier,
 | 
			
		||||
    },
 | 
			
		||||
    parsing::{
 | 
			
		||||
        ast::types::{FunctionExpression, KclNone, LiteralValue, TagDeclarator, TagNode},
 | 
			
		||||
        token::NumericSuffix,
 | 
			
		||||
    },
 | 
			
		||||
    std::{args::Arg, FnAsArg},
 | 
			
		||||
    ExecState, ExecutorContext, KclError, ModuleId, SourceRange,
 | 
			
		||||
    ExecutorContext, KclError, ModuleId, SourceRange,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use super::memory::EnvironmentRef;
 | 
			
		||||
@ -674,6 +675,19 @@ impl From<UnitLen> for crate::UnitLength {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<UnitLen> for kittycad_modeling_cmds::units::UnitLength {
 | 
			
		||||
    fn from(unit: UnitLen) -> Self {
 | 
			
		||||
        match unit {
 | 
			
		||||
            UnitLen::Cm => kittycad_modeling_cmds::units::UnitLength::Centimeters,
 | 
			
		||||
            UnitLen::Feet => kittycad_modeling_cmds::units::UnitLength::Feet,
 | 
			
		||||
            UnitLen::Inches => kittycad_modeling_cmds::units::UnitLength::Inches,
 | 
			
		||||
            UnitLen::M => kittycad_modeling_cmds::units::UnitLength::Meters,
 | 
			
		||||
            UnitLen::Mm => kittycad_modeling_cmds::units::UnitLength::Millimeters,
 | 
			
		||||
            UnitLen::Yards => kittycad_modeling_cmds::units::UnitLength::Yards,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Default, Clone, Copy, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema, Eq)]
 | 
			
		||||
#[ts(export)]
 | 
			
		||||
#[serde(tag = "type")]
 | 
			
		||||
 | 
			
		||||
@ -156,18 +156,14 @@ pub(crate) const RETURN_NAME: &str = "__return";
 | 
			
		||||
/// including other modules). Multiple interpretation runs should have fresh instances.
 | 
			
		||||
///
 | 
			
		||||
/// See module docs.
 | 
			
		||||
#[derive(Debug, Clone, Deserialize, Serialize, ts_rs::TS, JsonSchema)]
 | 
			
		||||
#[ts(export)]
 | 
			
		||||
#[serde(rename_all = "camelCase")]
 | 
			
		||||
pub struct ProgramMemory {
 | 
			
		||||
#[derive(Debug, Clone)]
 | 
			
		||||
pub(crate) struct ProgramMemory {
 | 
			
		||||
    environments: Vec<Environment>,
 | 
			
		||||
    /// Invariant: current_env.1.is_none()
 | 
			
		||||
    current_env: EnvironmentRef,
 | 
			
		||||
    /// Invariant: forall er in call_stack: er.1.is_none()
 | 
			
		||||
    call_stack: Vec<EnvironmentRef>,
 | 
			
		||||
    /// Statistics about the memory, should not be used for anything other than meta-info.
 | 
			
		||||
    #[allow(dead_code)]
 | 
			
		||||
    #[serde(skip)]
 | 
			
		||||
    pub(crate) stats: MemoryStats,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -573,7 +569,7 @@ pub(crate) struct MemoryStats {
 | 
			
		||||
mod env {
 | 
			
		||||
    use super::*;
 | 
			
		||||
 | 
			
		||||
    #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
 | 
			
		||||
    #[derive(Debug, Clone, PartialEq)]
 | 
			
		||||
    pub(super) struct Environment {
 | 
			
		||||
        bindings: IndexMap<String, KclValue>,
 | 
			
		||||
        // invariant: self.parent.is_none() => forall s in self.snapshots: s.parent_snapshot.is_none()
 | 
			
		||||
@ -603,7 +599,7 @@ mod env {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
 | 
			
		||||
    #[derive(Debug, Clone, PartialEq)]
 | 
			
		||||
    struct Snapshot {
 | 
			
		||||
        /// The version of the owning environment's parent environment corresponding to this snapshot.
 | 
			
		||||
        parent_snapshot: Option<SnapshotRef>,
 | 
			
		||||
 | 
			
		||||
@ -39,7 +39,7 @@ pub(crate) use import::{
 | 
			
		||||
    import_foreign, send_to_engine as send_import_to_engine, PreImportedGeometry, ZOO_COORD_SYSTEM,
 | 
			
		||||
};
 | 
			
		||||
pub use kcl_value::{KclObjectFields, KclValue, UnitAngle, UnitLen};
 | 
			
		||||
pub use memory::{EnvironmentRef, ProgramMemory};
 | 
			
		||||
pub use memory::EnvironmentRef;
 | 
			
		||||
pub use state::{ExecState, IdGenerator, MetaSettings};
 | 
			
		||||
 | 
			
		||||
pub(crate) mod annotations;
 | 
			
		||||
@ -821,7 +821,7 @@ mod tests {
 | 
			
		||||
    use pretty_assertions::assert_eq;
 | 
			
		||||
 | 
			
		||||
    use super::*;
 | 
			
		||||
    use crate::{errors::KclErrorDetails, ModuleId};
 | 
			
		||||
    use crate::{errors::KclErrorDetails, execution::memory::ProgramMemory, ModuleId};
 | 
			
		||||
 | 
			
		||||
    /// Convenience function to get a JSON value from memory and unwrap.
 | 
			
		||||
    #[track_caller]
 | 
			
		||||
@ -1235,7 +1235,7 @@ fn layer = () => {
 | 
			
		||||
const x = 5
 | 
			
		||||
 | 
			
		||||
// The 10 layers are replicas of each other, with a transform applied to each.
 | 
			
		||||
let shape = layer() |> patternTransform(10, transform, %)
 | 
			
		||||
let shape = layer() |> patternTransform(instances = 10, transform = transform)
 | 
			
		||||
"#;
 | 
			
		||||
 | 
			
		||||
        let result = parse_execute(ast).await;
 | 
			
		||||
 | 
			
		||||
@ -8,8 +8,8 @@ use uuid::Uuid;
 | 
			
		||||
use crate::{
 | 
			
		||||
    errors::{KclError, KclErrorDetails},
 | 
			
		||||
    execution::{
 | 
			
		||||
        annotations, kcl_value, Artifact, ArtifactCommand, ArtifactGraph, ArtifactId, ExecOutcome, ExecutorSettings,
 | 
			
		||||
        KclValue, Operation, ProgramMemory, UnitAngle, UnitLen,
 | 
			
		||||
        annotations, kcl_value, memory::ProgramMemory, Artifact, ArtifactCommand, ArtifactGraph, ArtifactId,
 | 
			
		||||
        ExecOutcome, ExecutorSettings, KclValue, Operation, UnitAngle, UnitLen,
 | 
			
		||||
    },
 | 
			
		||||
    modules::{ModuleId, ModuleInfo, ModuleLoader, ModulePath, ModuleRepr},
 | 
			
		||||
    parsing::ast::types::NonCodeValue,
 | 
			
		||||
@ -17,16 +17,14 @@ use crate::{
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// State for executing a program.
 | 
			
		||||
#[derive(Debug, Clone, Deserialize, Serialize)]
 | 
			
		||||
#[serde(rename_all = "camelCase")]
 | 
			
		||||
#[derive(Debug, Clone)]
 | 
			
		||||
pub struct ExecState {
 | 
			
		||||
    pub global: GlobalState,
 | 
			
		||||
    pub mod_local: ModuleState,
 | 
			
		||||
    pub(super) global: GlobalState,
 | 
			
		||||
    pub(super) mod_local: ModuleState,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone, Deserialize, Serialize)]
 | 
			
		||||
#[serde(rename_all = "camelCase")]
 | 
			
		||||
pub struct GlobalState {
 | 
			
		||||
#[derive(Debug, Clone)]
 | 
			
		||||
pub(super) struct GlobalState {
 | 
			
		||||
    /// Program variable bindings.
 | 
			
		||||
    pub memory: ProgramMemory,
 | 
			
		||||
    /// The stable artifact ID generator.
 | 
			
		||||
@ -52,9 +50,8 @@ pub struct GlobalState {
 | 
			
		||||
    pub mod_loader: ModuleLoader,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone, Deserialize, Serialize)]
 | 
			
		||||
#[serde(rename_all = "camelCase")]
 | 
			
		||||
pub struct ModuleState {
 | 
			
		||||
#[derive(Debug, Clone)]
 | 
			
		||||
pub(super) struct ModuleState {
 | 
			
		||||
    /// The current value of the pipe operator returned from the previous
 | 
			
		||||
    /// expression.  If we're not currently in a pipeline, this will be None.
 | 
			
		||||
    pub pipe_value: Option<KclValue>,
 | 
			
		||||
@ -125,19 +122,19 @@ impl ExecState {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn memory(&self) -> &ProgramMemory {
 | 
			
		||||
    pub(crate) fn memory(&self) -> &ProgramMemory {
 | 
			
		||||
        &self.global.memory
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn mut_memory(&mut self) -> &mut ProgramMemory {
 | 
			
		||||
    pub(crate) fn mut_memory(&mut self) -> &mut ProgramMemory {
 | 
			
		||||
        &mut self.global.memory
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn next_uuid(&mut self) -> Uuid {
 | 
			
		||||
    pub(crate) fn next_uuid(&mut self) -> Uuid {
 | 
			
		||||
        self.global.id_generator.next_uuid()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn add_artifact(&mut self, artifact: Artifact) {
 | 
			
		||||
    pub(crate) fn add_artifact(&mut self, artifact: Artifact) {
 | 
			
		||||
        let id = artifact.id();
 | 
			
		||||
        self.global.artifacts.insert(id, artifact);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -98,9 +98,7 @@ pub use source_range::SourceRange;
 | 
			
		||||
// Rather than make executor public and make lots of it pub(crate), just re-export into a new module.
 | 
			
		||||
// Ideally we wouldn't export these things at all, they should only be used for testing.
 | 
			
		||||
pub mod exec {
 | 
			
		||||
    pub use crate::execution::{
 | 
			
		||||
        ArtifactCommand, DefaultPlanes, IdGenerator, KclValue, PlaneType, ProgramMemory, Sketch,
 | 
			
		||||
    };
 | 
			
		||||
    pub use crate::execution::{ArtifactCommand, DefaultPlanes, IdGenerator, KclValue, PlaneType, Sketch};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(target_arch = "wasm32")]
 | 
			
		||||
 | 
			
		||||
@ -33,9 +33,8 @@ impl ModuleId {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
 | 
			
		||||
#[serde(rename_all = "camelCase")]
 | 
			
		||||
pub struct ModuleLoader {
 | 
			
		||||
#[derive(Debug, Clone, Default)]
 | 
			
		||||
pub(crate) struct ModuleLoader {
 | 
			
		||||
    /// The stack of import statements for detecting circular module imports.
 | 
			
		||||
    /// If this is empty, we're not currently executing an import statement.
 | 
			
		||||
    pub import_stack: Vec<PathBuf>,
 | 
			
		||||
 | 
			
		||||
@ -1271,6 +1271,19 @@ impl NonCodeMeta {
 | 
			
		||||
            .iter()
 | 
			
		||||
            .any(|(_, nodes)| nodes.iter().any(|node| node.contains(pos)))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Get the non-code meta immediately before the ith node in the AST that self is attached to.
 | 
			
		||||
    ///
 | 
			
		||||
    /// Returns an empty slice if there is no non-code metadata associated with the node.
 | 
			
		||||
    pub fn get(&self, i: usize) -> &[Node<NonCodeNode>] {
 | 
			
		||||
        if i == 0 {
 | 
			
		||||
            &self.start_nodes
 | 
			
		||||
        } else if let Some(meta) = self.non_code_nodes.get(&(i - 1)) {
 | 
			
		||||
            meta
 | 
			
		||||
        } else {
 | 
			
		||||
            &[]
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// implement Deserialize manually because we to force the keys of non_code_nodes to be usize
 | 
			
		||||
@ -1495,7 +1508,7 @@ impl ImportStatement {
 | 
			
		||||
            ImportPath::Kcl { filename: s } | ImportPath::Foreign { path: s } => s.split('.'),
 | 
			
		||||
            _ => return None,
 | 
			
		||||
        };
 | 
			
		||||
        let name = parts.next()?;
 | 
			
		||||
        let path = parts.next()?;
 | 
			
		||||
        let _ext = parts.next()?;
 | 
			
		||||
        let rest = parts.next();
 | 
			
		||||
 | 
			
		||||
@ -1503,7 +1516,7 @@ impl ImportStatement {
 | 
			
		||||
            return None;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Some(name.to_owned())
 | 
			
		||||
        path.rsplit('/').next().map(str::to_owned)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -102,21 +102,22 @@ async fn execute(test_name: &str, render_to_png: bool) {
 | 
			
		||||
            if render_to_png {
 | 
			
		||||
                twenty_twenty::assert_image(format!("tests/{test_name}/rendered_model.png"), &png, 0.99);
 | 
			
		||||
            }
 | 
			
		||||
            assert_snapshot(test_name, "Program memory after executing", || {
 | 
			
		||||
                insta::assert_json_snapshot!("program_memory", exec_state.memory(), {
 | 
			
		||||
                    ".environments[].**[].from[]" => rounded_redaction(4),
 | 
			
		||||
                    ".environments[].**[].to[]" => rounded_redaction(4),
 | 
			
		||||
                    ".environments[].**[].x[]" => rounded_redaction(4),
 | 
			
		||||
                    ".environments[].**[].y[]" => rounded_redaction(4),
 | 
			
		||||
                    ".environments[].**[].z[]" => rounded_redaction(4),
 | 
			
		||||
                });
 | 
			
		||||
            });
 | 
			
		||||
            let outcome = exec_state.to_wasm_outcome();
 | 
			
		||||
            assert_common_snapshots(
 | 
			
		||||
                test_name,
 | 
			
		||||
                exec_state.mod_local.operations,
 | 
			
		||||
                exec_state.global.artifact_commands,
 | 
			
		||||
                exec_state.global.artifact_graph,
 | 
			
		||||
                outcome.operations,
 | 
			
		||||
                outcome.artifact_commands,
 | 
			
		||||
                outcome.artifact_graph,
 | 
			
		||||
            );
 | 
			
		||||
            assert_snapshot(test_name, "Variables in memory after executing", || {
 | 
			
		||||
                insta::assert_json_snapshot!("program_memory", outcome.variables, {
 | 
			
		||||
                        ".**[].from[]" => rounded_redaction(4),
 | 
			
		||||
                        ".**[].to[]" => rounded_redaction(4),
 | 
			
		||||
                        ".**[].x[]" => rounded_redaction(4),
 | 
			
		||||
                        ".**[].y[]" => rounded_redaction(4),
 | 
			
		||||
                        ".**[].z[]" => rounded_redaction(4),
 | 
			
		||||
                })
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        Err(e) => {
 | 
			
		||||
            let ok_path_str = format!("tests/{test_name}/program_memory.snap");
 | 
			
		||||
 | 
			
		||||
@ -358,10 +358,6 @@ impl Args {
 | 
			
		||||
        Ok(numbers)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub(crate) fn get_pattern_transform_args(&self) -> Result<(u32, FnAsArg<'_>, SolidSet, Option<bool>), KclError> {
 | 
			
		||||
        FromArgs::from_args(self, 0)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub(crate) fn get_hypotenuse_leg(&self) -> Result<(f64, f64), KclError> {
 | 
			
		||||
        let numbers = self.get_number_array()?;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -134,7 +134,7 @@ async fn inner_chamfer(
 | 
			
		||||
            EdgeReference::Tag(edge_tag) => args.get_tag_engine_info(exec_state, &edge_tag)?.id,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        let id = exec_state.global.id_generator.next_uuid();
 | 
			
		||||
        let id = exec_state.next_uuid();
 | 
			
		||||
        args.batch_end_cmd(
 | 
			
		||||
            id,
 | 
			
		||||
            ModelingCmd::from(mcmd::Solid3dFilletEdge {
 | 
			
		||||
 | 
			
		||||
@ -27,9 +27,9 @@ pub async fn int(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kc
 | 
			
		||||
/// startSketchOn('XZ')
 | 
			
		||||
///   |> circle({ center = [0, 0], radius = 2 }, %)
 | 
			
		||||
///   |> extrude(length = 5)
 | 
			
		||||
///   |> patternTransform(n, fn(id) {
 | 
			
		||||
///   |> patternTransform(instances = n, transform = fn(id) {
 | 
			
		||||
///   return { translate = [4 * id, 0, 0] }
 | 
			
		||||
/// }, %)
 | 
			
		||||
/// })
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "int",
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,7 @@ use schemars::JsonSchema;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
use uuid::Uuid;
 | 
			
		||||
 | 
			
		||||
use super::args::Arg;
 | 
			
		||||
use super::{args::Arg, FnAsArg};
 | 
			
		||||
use crate::{
 | 
			
		||||
    errors::{KclError, KclErrorDetails},
 | 
			
		||||
    execution::{
 | 
			
		||||
@ -47,10 +47,14 @@ pub struct LinearPattern3dData {
 | 
			
		||||
 | 
			
		||||
/// Repeat some 3D solid, changing each repetition slightly.
 | 
			
		||||
pub async fn pattern_transform(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let (num_repetitions, transform, extr, use_original) = args.get_pattern_transform_args()?;
 | 
			
		||||
    let solid_set = args.get_unlabeled_kw_arg("solidSet")?;
 | 
			
		||||
    let instances: u32 = args.get_kw_arg("instances")?;
 | 
			
		||||
    let transform: FnAsArg<'_> = args.get_kw_arg("transform")?;
 | 
			
		||||
    let use_original: Option<bool> = args.get_kw_arg_opt("useOriginal")?;
 | 
			
		||||
 | 
			
		||||
    let solids = inner_pattern_transform(
 | 
			
		||||
        num_repetitions,
 | 
			
		||||
        solid_set,
 | 
			
		||||
        instances,
 | 
			
		||||
        FunctionParam {
 | 
			
		||||
            inner: transform.func,
 | 
			
		||||
            fn_expr: transform.expr,
 | 
			
		||||
@ -58,7 +62,6 @@ pub async fn pattern_transform(exec_state: &mut ExecState, args: Args) -> Result
 | 
			
		||||
            ctx: args.ctx.clone(),
 | 
			
		||||
            memory: transform.memory,
 | 
			
		||||
        },
 | 
			
		||||
        extr,
 | 
			
		||||
        use_original,
 | 
			
		||||
        exec_state,
 | 
			
		||||
        &args,
 | 
			
		||||
@ -69,11 +72,14 @@ pub async fn pattern_transform(exec_state: &mut ExecState, args: Args) -> Result
 | 
			
		||||
 | 
			
		||||
/// Repeat some 2D sketch, changing each repetition slightly.
 | 
			
		||||
pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let (num_repetitions, transform, sketch, use_original): (u32, super::FnAsArg<'_>, SketchSet, Option<bool>) =
 | 
			
		||||
        super::args::FromArgs::from_args(&args, 0)?;
 | 
			
		||||
    let sketch_set = args.get_unlabeled_kw_arg("sketchSet")?;
 | 
			
		||||
    let instances: u32 = args.get_kw_arg("instances")?;
 | 
			
		||||
    let transform: FnAsArg<'_> = args.get_kw_arg("transform")?;
 | 
			
		||||
    let use_original: Option<bool> = args.get_kw_arg_opt("useOriginal")?;
 | 
			
		||||
 | 
			
		||||
    let sketches = inner_pattern_transform_2d(
 | 
			
		||||
        num_repetitions,
 | 
			
		||||
        sketch_set,
 | 
			
		||||
        instances,
 | 
			
		||||
        FunctionParam {
 | 
			
		||||
            inner: transform.func,
 | 
			
		||||
            fn_expr: transform.expr,
 | 
			
		||||
@ -81,7 +87,6 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res
 | 
			
		||||
            ctx: args.ctx.clone(),
 | 
			
		||||
            memory: transform.memory,
 | 
			
		||||
        },
 | 
			
		||||
        sketch,
 | 
			
		||||
        use_original,
 | 
			
		||||
        exec_state,
 | 
			
		||||
        &args,
 | 
			
		||||
@ -96,7 +101,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res
 | 
			
		||||
/// Transformation function could alter rotation, scale, visibility, position, etc.
 | 
			
		||||
///
 | 
			
		||||
/// The `patternTransform` call itself takes a number for how many total instances of
 | 
			
		||||
/// the shape should be. For example, if you use a circle with `patternTransform(4, transform)`
 | 
			
		||||
/// the shape should be. For example, if you use a circle with `patternTransform(instances = 4, transform = f)`
 | 
			
		||||
/// then there will be 4 circles: the original, and 3 created by replicating the original and
 | 
			
		||||
/// calling the transform function on each.
 | 
			
		||||
///
 | 
			
		||||
@ -140,7 +145,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res
 | 
			
		||||
/// sketch001 = startSketchOn('XZ')
 | 
			
		||||
///   |> circle({ center = [0, 0], radius = 2 }, %)
 | 
			
		||||
///   |> extrude(length = 5)
 | 
			
		||||
///   |> patternTransform(4, transform, %)
 | 
			
		||||
///   |> patternTransform(instances = 4, transform = transform)
 | 
			
		||||
/// ```
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// // Each instance will be shifted along the X axis,
 | 
			
		||||
@ -153,7 +158,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res
 | 
			
		||||
/// sketch001 = startSketchOn('XZ')
 | 
			
		||||
///   |> circle({ center = [0, 0], radius = 2 }, %)
 | 
			
		||||
///   |> extrude(length = 5)
 | 
			
		||||
///   |> patternTransform(4, transform, %)
 | 
			
		||||
///   |> patternTransform(instances = 4, transform = transform)
 | 
			
		||||
/// ```
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// fn cube(length, center) {
 | 
			
		||||
@ -192,7 +197,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res
 | 
			
		||||
///
 | 
			
		||||
/// myCubes =
 | 
			
		||||
///   cube(width, [100,0])
 | 
			
		||||
///   |> patternTransform(25, transform, %)
 | 
			
		||||
///   |> patternTransform(instances = 25, transform = transform)
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
@ -228,7 +233,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res
 | 
			
		||||
/// }
 | 
			
		||||
/// myCubes =
 | 
			
		||||
///   cube(width, [100,100])
 | 
			
		||||
///   |> patternTransform(4, transform, %)
 | 
			
		||||
///   |> patternTransform(instances = 4, transform = transform)
 | 
			
		||||
/// ```
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// // Parameters
 | 
			
		||||
@ -252,7 +257,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res
 | 
			
		||||
/// }
 | 
			
		||||
/// // The vase is 100 layers tall.
 | 
			
		||||
/// // The 100 layers are replica of each other, with a slight transformation applied to each.
 | 
			
		||||
/// vase = layer() |> patternTransform(100, transform, %)
 | 
			
		||||
/// vase = layer() |> patternTransform(instances = 100, transform = transform)
 | 
			
		||||
/// ```
 | 
			
		||||
/// ```
 | 
			
		||||
/// fn transform(i) {
 | 
			
		||||
@ -271,33 +276,48 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res
 | 
			
		||||
///        inscribed: false
 | 
			
		||||
///      }, %)
 | 
			
		||||
///   |> extrude(length = 4)
 | 
			
		||||
///   |> patternTransform(3, transform, %)
 | 
			
		||||
///   |> patternTransform(instances = 3, transform = transform)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "patternTransform",
 | 
			
		||||
    feature_tree_operation = true,
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        solid_set = { docs = "The solid(s) to duplicate" },
 | 
			
		||||
        instances = { docs = "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect." },
 | 
			
		||||
        transform = { docs = "How each replica should be transformed. The transform function takes a single parameter: an integer representing which number replication the transform is for. E.g. the first replica to be transformed will be passed the argument `1`. This simplifies your math: the transform function can rely on id `0` being the original instance passed into the `patternTransform`. See the examples." },
 | 
			
		||||
        use_original = { docs = "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false." },
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
async fn inner_pattern_transform<'a>(
 | 
			
		||||
    total_instances: u32,
 | 
			
		||||
    transform_function: FunctionParam<'a>,
 | 
			
		||||
    solid_set: SolidSet,
 | 
			
		||||
    instances: u32,
 | 
			
		||||
    transform: FunctionParam<'a>,
 | 
			
		||||
    use_original: Option<bool>,
 | 
			
		||||
    exec_state: &mut ExecState,
 | 
			
		||||
    args: &'a Args,
 | 
			
		||||
) -> Result<Vec<Box<Solid>>, KclError> {
 | 
			
		||||
    // Build the vec of transforms, one for each repetition.
 | 
			
		||||
    let mut transform = Vec::with_capacity(usize::try_from(total_instances).unwrap());
 | 
			
		||||
    if total_instances < 1 {
 | 
			
		||||
    let mut transform_vec = Vec::with_capacity(usize::try_from(instances).unwrap());
 | 
			
		||||
    if instances < 1 {
 | 
			
		||||
        return Err(KclError::Semantic(KclErrorDetails {
 | 
			
		||||
            source_ranges: vec![args.source_range],
 | 
			
		||||
            message: MUST_HAVE_ONE_INSTANCE.to_owned(),
 | 
			
		||||
        }));
 | 
			
		||||
    }
 | 
			
		||||
    for i in 1..total_instances {
 | 
			
		||||
        let t = make_transform::<Box<Solid>>(i, &transform_function, args.source_range, exec_state).await?;
 | 
			
		||||
        transform.push(t);
 | 
			
		||||
    for i in 1..instances {
 | 
			
		||||
        let t = make_transform::<Box<Solid>>(i, &transform, args.source_range, exec_state).await?;
 | 
			
		||||
        transform_vec.push(t);
 | 
			
		||||
    }
 | 
			
		||||
    execute_pattern_transform(transform, solid_set, use_original.unwrap_or_default(), exec_state, args).await
 | 
			
		||||
    execute_pattern_transform(
 | 
			
		||||
        transform_vec,
 | 
			
		||||
        solid_set,
 | 
			
		||||
        use_original.unwrap_or_default(),
 | 
			
		||||
        exec_state,
 | 
			
		||||
        args,
 | 
			
		||||
    )
 | 
			
		||||
    .await
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Just like patternTransform, but works on 2D sketches not 3D solids.
 | 
			
		||||
@ -310,32 +330,47 @@ async fn inner_pattern_transform<'a>(
 | 
			
		||||
/// // Sketch 4 circles.
 | 
			
		||||
/// sketch001 = startSketchOn('XZ')
 | 
			
		||||
///   |> circle({ center: [0, 0], radius: 2 }, %)
 | 
			
		||||
///   |> patternTransform2d(4, transform, %)
 | 
			
		||||
///   |> patternTransform2d(instances = 4, transform = transform)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "patternTransform2d",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        sketch_set = { docs = "The sketch(es) to duplicate" },
 | 
			
		||||
        instances = { docs = "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect." },
 | 
			
		||||
        transform = { docs = "How each replica should be transformed. The transform function takes a single parameter: an integer representing which number replication the transform is for. E.g. the first replica to be transformed will be passed the argument `1`. This simplifies your math: the transform function can rely on id `0` being the original instance passed into the `patternTransform`. See the examples." },
 | 
			
		||||
        use_original = { docs = "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false." },
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
async fn inner_pattern_transform_2d<'a>(
 | 
			
		||||
    total_instances: u32,
 | 
			
		||||
    transform_function: FunctionParam<'a>,
 | 
			
		||||
    solid_set: SketchSet,
 | 
			
		||||
    sketch_set: SketchSet,
 | 
			
		||||
    instances: u32,
 | 
			
		||||
    transform: FunctionParam<'a>,
 | 
			
		||||
    use_original: Option<bool>,
 | 
			
		||||
    exec_state: &mut ExecState,
 | 
			
		||||
    args: &'a Args,
 | 
			
		||||
) -> Result<Vec<Box<Sketch>>, KclError> {
 | 
			
		||||
    // Build the vec of transforms, one for each repetition.
 | 
			
		||||
    let mut transform = Vec::with_capacity(usize::try_from(total_instances).unwrap());
 | 
			
		||||
    if total_instances < 1 {
 | 
			
		||||
    let mut transform_vec = Vec::with_capacity(usize::try_from(instances).unwrap());
 | 
			
		||||
    if instances < 1 {
 | 
			
		||||
        return Err(KclError::Semantic(KclErrorDetails {
 | 
			
		||||
            source_ranges: vec![args.source_range],
 | 
			
		||||
            message: MUST_HAVE_ONE_INSTANCE.to_owned(),
 | 
			
		||||
        }));
 | 
			
		||||
    }
 | 
			
		||||
    for i in 1..total_instances {
 | 
			
		||||
        let t = make_transform::<Box<Sketch>>(i, &transform_function, args.source_range, exec_state).await?;
 | 
			
		||||
        transform.push(t);
 | 
			
		||||
    for i in 1..instances {
 | 
			
		||||
        let t = make_transform::<Box<Sketch>>(i, &transform, args.source_range, exec_state).await?;
 | 
			
		||||
        transform_vec.push(t);
 | 
			
		||||
    }
 | 
			
		||||
    execute_pattern_transform(transform, solid_set, use_original.unwrap_or_default(), exec_state, args).await
 | 
			
		||||
    execute_pattern_transform(
 | 
			
		||||
        transform_vec,
 | 
			
		||||
        sketch_set,
 | 
			
		||||
        use_original.unwrap_or_default(),
 | 
			
		||||
        exec_state,
 | 
			
		||||
        args,
 | 
			
		||||
    )
 | 
			
		||||
    .await
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async fn execute_pattern_transform<T: GeometryTrait>(
 | 
			
		||||
@ -406,7 +441,7 @@ async fn send_pattern_transform<T: GeometryTrait>(
 | 
			
		||||
 | 
			
		||||
async fn make_transform<T: GeometryTrait>(
 | 
			
		||||
    i: u32,
 | 
			
		||||
    transform_function: &FunctionParam<'_>,
 | 
			
		||||
    transform: &FunctionParam<'_>,
 | 
			
		||||
    source_range: SourceRange,
 | 
			
		||||
    exec_state: &mut ExecState,
 | 
			
		||||
) -> Result<Vec<Transform>, KclError> {
 | 
			
		||||
@ -416,7 +451,7 @@ async fn make_transform<T: GeometryTrait>(
 | 
			
		||||
        meta: vec![source_range.into()],
 | 
			
		||||
    };
 | 
			
		||||
    let transform_fn_args = vec![Arg::synthetic(repetition_num)];
 | 
			
		||||
    let transform_fn_return = transform_function.call(exec_state, transform_fn_args).await?;
 | 
			
		||||
    let transform_fn_return = transform.call(exec_state, transform_fn_args).await?;
 | 
			
		||||
 | 
			
		||||
    // Unpack the returned transform object.
 | 
			
		||||
    let source_ranges = vec![source_range];
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,7 @@ use crate::{
 | 
			
		||||
 | 
			
		||||
/// Returns the point at the end of the given segment.
 | 
			
		||||
pub async fn segment_end(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let tag: TagIdentifier = args.get_data()?;
 | 
			
		||||
    let tag: TagIdentifier = args.get_unlabeled_kw_arg("tag")?;
 | 
			
		||||
    let result = inner_segment_end(&tag, exec_state, args.clone())?;
 | 
			
		||||
 | 
			
		||||
    args.make_user_val_from_point(result)
 | 
			
		||||
@ -45,6 +45,11 @@ pub async fn segment_end(exec_state: &mut ExecState, args: Args) -> Result<KclVa
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segEnd",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_end(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<[f64; 2], KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
@ -60,7 +65,7 @@ fn inner_segment_end(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args
 | 
			
		||||
 | 
			
		||||
/// Returns the segment end of x.
 | 
			
		||||
pub async fn segment_end_x(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let tag: TagIdentifier = args.get_data()?;
 | 
			
		||||
    let tag: TagIdentifier = args.get_unlabeled_kw_arg("tag")?;
 | 
			
		||||
    let result = inner_segment_end_x(&tag, exec_state, args.clone())?;
 | 
			
		||||
 | 
			
		||||
    Ok(args.make_user_val_from_f64(result))
 | 
			
		||||
@ -81,6 +86,11 @@ pub async fn segment_end_x(exec_state: &mut ExecState, args: Args) -> Result<Kcl
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segEndX",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_end_x(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
@ -96,7 +106,7 @@ fn inner_segment_end_x(tag: &TagIdentifier, exec_state: &mut ExecState, args: Ar
 | 
			
		||||
 | 
			
		||||
/// Returns the segment end of y.
 | 
			
		||||
pub async fn segment_end_y(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let tag: TagIdentifier = args.get_data()?;
 | 
			
		||||
    let tag: TagIdentifier = args.get_unlabeled_kw_arg("tag")?;
 | 
			
		||||
    let result = inner_segment_end_y(&tag, exec_state, args.clone())?;
 | 
			
		||||
 | 
			
		||||
    Ok(args.make_user_val_from_f64(result))
 | 
			
		||||
@ -118,6 +128,11 @@ pub async fn segment_end_y(exec_state: &mut ExecState, args: Args) -> Result<Kcl
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segEndY",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_end_y(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
@ -133,7 +148,7 @@ fn inner_segment_end_y(tag: &TagIdentifier, exec_state: &mut ExecState, args: Ar
 | 
			
		||||
 | 
			
		||||
/// Returns the point at the start of the given segment.
 | 
			
		||||
pub async fn segment_start(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let tag: TagIdentifier = args.get_data()?;
 | 
			
		||||
    let tag: TagIdentifier = args.get_unlabeled_kw_arg("tag")?;
 | 
			
		||||
    let result = inner_segment_start(&tag, exec_state, args.clone())?;
 | 
			
		||||
 | 
			
		||||
    args.make_user_val_from_point(result)
 | 
			
		||||
@ -166,6 +181,11 @@ pub async fn segment_start(exec_state: &mut ExecState, args: Args) -> Result<Kcl
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segStart",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_start(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<[f64; 2], KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
@ -181,7 +201,7 @@ fn inner_segment_start(tag: &TagIdentifier, exec_state: &mut ExecState, args: Ar
 | 
			
		||||
 | 
			
		||||
/// Returns the segment start of x.
 | 
			
		||||
pub async fn segment_start_x(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let tag: TagIdentifier = args.get_data()?;
 | 
			
		||||
    let tag: TagIdentifier = args.get_unlabeled_kw_arg("tag")?;
 | 
			
		||||
    let result = inner_segment_start_x(&tag, exec_state, args.clone())?;
 | 
			
		||||
 | 
			
		||||
    Ok(args.make_user_val_from_f64(result))
 | 
			
		||||
@ -202,6 +222,11 @@ pub async fn segment_start_x(exec_state: &mut ExecState, args: Args) -> Result<K
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segStartX",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_start_x(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
@ -217,7 +242,7 @@ fn inner_segment_start_x(tag: &TagIdentifier, exec_state: &mut ExecState, args:
 | 
			
		||||
 | 
			
		||||
/// Returns the segment start of y.
 | 
			
		||||
pub async fn segment_start_y(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let tag: TagIdentifier = args.get_data()?;
 | 
			
		||||
    let tag: TagIdentifier = args.get_unlabeled_kw_arg("tag")?;
 | 
			
		||||
    let result = inner_segment_start_y(&tag, exec_state, args.clone())?;
 | 
			
		||||
 | 
			
		||||
    Ok(args.make_user_val_from_f64(result))
 | 
			
		||||
@ -239,6 +264,11 @@ pub async fn segment_start_y(exec_state: &mut ExecState, args: Args) -> Result<K
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segStartY",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_start_y(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
@ -253,7 +283,7 @@ fn inner_segment_start_y(tag: &TagIdentifier, exec_state: &mut ExecState, args:
 | 
			
		||||
}
 | 
			
		||||
/// Returns the last segment of x.
 | 
			
		||||
pub async fn last_segment_x(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let sketch = args.get_sketch()?;
 | 
			
		||||
    let sketch = args.get_unlabeled_kw_arg("sketch")?;
 | 
			
		||||
    let result = inner_last_segment_x(sketch, args.clone())?;
 | 
			
		||||
 | 
			
		||||
    Ok(args.make_user_val_from_f64(result))
 | 
			
		||||
@ -275,6 +305,11 @@ pub async fn last_segment_x(_exec_state: &mut ExecState, args: Args) -> Result<K
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "lastSegX",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        sketch = { docs = "The sketch whose line segment is being queried"},
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
fn inner_last_segment_x(sketch: Sketch, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
    let last_line = sketch
 | 
			
		||||
@ -293,7 +328,7 @@ fn inner_last_segment_x(sketch: Sketch, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
 | 
			
		||||
/// Returns the last segment of y.
 | 
			
		||||
pub async fn last_segment_y(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let sketch = args.get_sketch()?;
 | 
			
		||||
    let sketch = args.get_unlabeled_kw_arg("sketch")?;
 | 
			
		||||
    let result = inner_last_segment_y(sketch, args.clone())?;
 | 
			
		||||
 | 
			
		||||
    Ok(args.make_user_val_from_f64(result))
 | 
			
		||||
@ -315,6 +350,11 @@ pub async fn last_segment_y(_exec_state: &mut ExecState, args: Args) -> Result<K
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "lastSegY",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        sketch = { docs = "The sketch whose line segment is being queried"},
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
fn inner_last_segment_y(sketch: Sketch, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
    let last_line = sketch
 | 
			
		||||
@ -333,7 +373,7 @@ fn inner_last_segment_y(sketch: Sketch, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
 | 
			
		||||
/// Returns the length of the segment.
 | 
			
		||||
pub async fn segment_length(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let tag: TagIdentifier = args.get_data()?;
 | 
			
		||||
    let tag: TagIdentifier = args.get_unlabeled_kw_arg("tag")?;
 | 
			
		||||
    let result = inner_segment_length(&tag, exec_state, args.clone())?;
 | 
			
		||||
    Ok(args.make_user_val_from_f64(result))
 | 
			
		||||
}
 | 
			
		||||
@ -361,6 +401,11 @@ pub async fn segment_length(exec_state: &mut ExecState, args: Args) -> Result<Kc
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segLen",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_length(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
@ -378,7 +423,7 @@ fn inner_segment_length(tag: &TagIdentifier, exec_state: &mut ExecState, args: A
 | 
			
		||||
 | 
			
		||||
/// Returns the angle of the segment.
 | 
			
		||||
pub async fn segment_angle(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let tag: TagIdentifier = args.get_data()?;
 | 
			
		||||
    let tag: TagIdentifier = args.get_unlabeled_kw_arg("tag")?;
 | 
			
		||||
 | 
			
		||||
    let result = inner_segment_angle(&tag, exec_state, args.clone())?;
 | 
			
		||||
    Ok(args.make_user_val_from_f64(result))
 | 
			
		||||
@ -401,6 +446,11 @@ pub async fn segment_angle(exec_state: &mut ExecState, args: Args) -> Result<Kcl
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segAng",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_angle(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
@ -418,7 +468,7 @@ fn inner_segment_angle(tag: &TagIdentifier, exec_state: &mut ExecState, args: Ar
 | 
			
		||||
 | 
			
		||||
/// Returns the angle coming out of the end of the segment in degrees.
 | 
			
		||||
pub async fn tangent_to_end(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let tag: TagIdentifier = args.get_data()?;
 | 
			
		||||
    let tag: TagIdentifier = args.get_unlabeled_kw_arg("tag")?;
 | 
			
		||||
 | 
			
		||||
    let result = inner_tangent_to_end(&tag, exec_state, args.clone()).await?;
 | 
			
		||||
    Ok(args.make_user_val_from_f64(result))
 | 
			
		||||
@ -496,6 +546,11 @@ pub async fn tangent_to_end(exec_state: &mut ExecState, args: Args) -> Result<Kc
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "tangentToEnd",
 | 
			
		||||
    keywords = true,
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    }
 | 
			
		||||
}]
 | 
			
		||||
async fn inner_tangent_to_end(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
 | 
			
		||||
@ -218,7 +218,7 @@ async fn straight_line(
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    let id = exec_state.global.id_generator.next_uuid();
 | 
			
		||||
    let id = exec_state.next_uuid();
 | 
			
		||||
    args.batch_modeling_cmd(
 | 
			
		||||
        id,
 | 
			
		||||
        ModelingCmd::from(mcmd::ExtendPath {
 | 
			
		||||
 | 
			
		||||
@ -5,9 +5,9 @@ use std::path::PathBuf;
 | 
			
		||||
use crate::{
 | 
			
		||||
    engine::new_zoo_client,
 | 
			
		||||
    errors::ExecErrorWithState,
 | 
			
		||||
    execution::{ExecutorContext, ExecutorSettings},
 | 
			
		||||
    execution::{ExecState, ExecutorContext, ExecutorSettings},
 | 
			
		||||
    settings::types::UnitLength,
 | 
			
		||||
    ConnectionError, ExecError, ExecState, KclErrorWithOutputs, Program,
 | 
			
		||||
    ConnectionError, ExecError, KclErrorWithOutputs, Program,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#[derive(serde::Deserialize, serde::Serialize)]
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,50 +1,320 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing angled_line.kcl
 | 
			
		||||
description: Variables in memory after executing angled_line.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "part001": {
 | 
			
		||||
    "type": "Solid",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "type": "Solid",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "value": [
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            73,
 | 
			
		||||
            97,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            103,
 | 
			
		||||
            142,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": {
 | 
			
		||||
            "end": 141,
 | 
			
		||||
            "start": 135,
 | 
			
		||||
            "type": "TagDeclarator",
 | 
			
		||||
            "value": "seg01"
 | 
			
		||||
          },
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            148,
 | 
			
		||||
            174,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            180,
 | 
			
		||||
            217,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            223,
 | 
			
		||||
            250,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            256,
 | 
			
		||||
            264,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "sketch": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "paths": [
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                73,
 | 
			
		||||
                97,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              4.83,
 | 
			
		||||
              12.56
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              19.93,
 | 
			
		||||
              15.04
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                103,
 | 
			
		||||
                142,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              19.93,
 | 
			
		||||
              15.04
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": {
 | 
			
		||||
              "end": 141,
 | 
			
		||||
              "start": 135,
 | 
			
		||||
              "type": "TagDeclarator",
 | 
			
		||||
              "value": "seg01"
 | 
			
		||||
            },
 | 
			
		||||
            "to": [
 | 
			
		||||
              23.08,
 | 
			
		||||
              5.19
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                148,
 | 
			
		||||
                174,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              23.08,
 | 
			
		||||
              5.19
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              7.91,
 | 
			
		||||
              1.09
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                180,
 | 
			
		||||
                217,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              7.91,
 | 
			
		||||
              1.09
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              11.6718,
 | 
			
		||||
              -10.6731
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                223,
 | 
			
		||||
                250,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              11.6718,
 | 
			
		||||
              -10.6731
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              -1.3482,
 | 
			
		||||
              -0.6431
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                256,
 | 
			
		||||
                264,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              -1.3482,
 | 
			
		||||
              -0.6431
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              4.83,
 | 
			
		||||
              12.56
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "on": {
 | 
			
		||||
          "type": "plane",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "artifactId": "[uuid]",
 | 
			
		||||
          "value": "XY",
 | 
			
		||||
          "origin": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "xAxis": {
 | 
			
		||||
            "x": 1.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "yAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 1.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "zAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 1.0
 | 
			
		||||
          },
 | 
			
		||||
          "units": {
 | 
			
		||||
            "type": "Mm"
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "part001": {
 | 
			
		||||
          "type": "Solid",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
        "start": {
 | 
			
		||||
          "from": [
 | 
			
		||||
            4.83,
 | 
			
		||||
            12.56
 | 
			
		||||
          ],
 | 
			
		||||
          "to": [
 | 
			
		||||
            4.83,
 | 
			
		||||
            12.56
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "__geoMeta": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": [
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  73,
 | 
			
		||||
                  97,
 | 
			
		||||
                  0
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              67,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "tags": {
 | 
			
		||||
          "seg01": {
 | 
			
		||||
            "type": "TagIdentifier",
 | 
			
		||||
            "value": "seg01",
 | 
			
		||||
            "info": {
 | 
			
		||||
              "type": "TagEngineInfo",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sketch": "[uuid]",
 | 
			
		||||
              "path": {
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    103,
 | 
			
		||||
                    142,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "from": [
 | 
			
		||||
                  19.93,
 | 
			
		||||
                  15.040000000000001
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
                "tag": {
 | 
			
		||||
                  "end": 141,
 | 
			
		||||
                  "start": 135,
 | 
			
		||||
                  "type": "TagDeclarator",
 | 
			
		||||
                  "value": "seg01"
 | 
			
		||||
                },
 | 
			
		||||
                "to": [
 | 
			
		||||
                  23.08,
 | 
			
		||||
                  5.190000000000001
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "ToPoint"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
              "surface": {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
@ -59,392 +329,109 @@ description: Program memory after executing angled_line.kcl
 | 
			
		||||
                  "value": "seg01"
 | 
			
		||||
                },
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  148,
 | 
			
		||||
                  174,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  180,
 | 
			
		||||
                  217,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  223,
 | 
			
		||||
                  250,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  256,
 | 
			
		||||
                  264,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "sketch": {
 | 
			
		||||
              "type": "Sketch",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "paths": [
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      73,
 | 
			
		||||
                      97,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    4.83,
 | 
			
		||||
                    12.56
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    19.93,
 | 
			
		||||
                    15.04
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      103,
 | 
			
		||||
                      142,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    19.93,
 | 
			
		||||
                    15.04
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": {
 | 
			
		||||
                    "end": 141,
 | 
			
		||||
                    "start": 135,
 | 
			
		||||
                    "type": "TagDeclarator",
 | 
			
		||||
                    "value": "seg01"
 | 
			
		||||
                  },
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    23.08,
 | 
			
		||||
                    5.19
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      148,
 | 
			
		||||
                      174,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    23.08,
 | 
			
		||||
                    5.19
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    7.91,
 | 
			
		||||
                    1.09
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      180,
 | 
			
		||||
                      217,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    7.91,
 | 
			
		||||
                    1.09
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    11.6718,
 | 
			
		||||
                    -10.6731
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      223,
 | 
			
		||||
                      250,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    11.6718,
 | 
			
		||||
                    -10.6731
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    -1.3482,
 | 
			
		||||
                    -0.6431
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      256,
 | 
			
		||||
                      264,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    -1.3482,
 | 
			
		||||
                    -0.6431
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    4.83,
 | 
			
		||||
                    12.56
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "on": {
 | 
			
		||||
                "type": "plane",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "artifactId": "[uuid]",
 | 
			
		||||
                "value": "XY",
 | 
			
		||||
                "origin": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "xAxis": {
 | 
			
		||||
                  "x": 1.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "yAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 1.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "zAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 1.0
 | 
			
		||||
                },
 | 
			
		||||
                "units": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "__meta": []
 | 
			
		||||
              },
 | 
			
		||||
              "start": {
 | 
			
		||||
                "from": [
 | 
			
		||||
                  4.83,
 | 
			
		||||
                  12.56
 | 
			
		||||
                ],
 | 
			
		||||
                "to": [
 | 
			
		||||
                  4.83,
 | 
			
		||||
                  12.56
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    67,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "tags": {
 | 
			
		||||
                "seg01": {
 | 
			
		||||
                  "type": "TagIdentifier",
 | 
			
		||||
                  "value": "seg01",
 | 
			
		||||
                  "info": {
 | 
			
		||||
                    "type": "TagEngineInfo",
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sketch": "[uuid]",
 | 
			
		||||
                    "path": {
 | 
			
		||||
                      "__geoMeta": {
 | 
			
		||||
                        "id": "[uuid]",
 | 
			
		||||
                        "sourceRange": [
 | 
			
		||||
                          103,
 | 
			
		||||
                          142,
 | 
			
		||||
                          0
 | 
			
		||||
                        ]
 | 
			
		||||
                      },
 | 
			
		||||
                      "from": [
 | 
			
		||||
                        19.93,
 | 
			
		||||
                        15.040000000000001
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 141,
 | 
			
		||||
                        "start": 135,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "seg01"
 | 
			
		||||
                      },
 | 
			
		||||
                      "to": [
 | 
			
		||||
                        23.08,
 | 
			
		||||
                        5.190000000000001
 | 
			
		||||
                      ],
 | 
			
		||||
                      "type": "ToPoint"
 | 
			
		||||
                    },
 | 
			
		||||
                    "surface": {
 | 
			
		||||
                      "faceId": "[uuid]",
 | 
			
		||||
                      "id": "[uuid]",
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        103,
 | 
			
		||||
                        142,
 | 
			
		||||
                        0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 141,
 | 
			
		||||
                        "start": 135,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "seg01"
 | 
			
		||||
                      },
 | 
			
		||||
                      "type": "extrudePlane"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "__meta": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        135,
 | 
			
		||||
                        141,
 | 
			
		||||
                        0
 | 
			
		||||
                      ]
 | 
			
		||||
                    }
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "originalId": "[uuid]",
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    67,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "height": 4.0,
 | 
			
		||||
            "startCapId": "[uuid]",
 | 
			
		||||
            "endCapId": "[uuid]",
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  35,
 | 
			
		||||
                  67,
 | 
			
		||||
                  135,
 | 
			
		||||
                  141,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "seg01": {
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "value": "seg01",
 | 
			
		||||
          "info": {
 | 
			
		||||
            "type": "TagEngineInfo",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "sketch": "[uuid]",
 | 
			
		||||
            "path": {
 | 
			
		||||
              "__geoMeta": {
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  103,
 | 
			
		||||
                  142,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              },
 | 
			
		||||
              "from": [
 | 
			
		||||
                19.93,
 | 
			
		||||
                15.040000000000001
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 141,
 | 
			
		||||
                "start": 135,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "seg01"
 | 
			
		||||
              },
 | 
			
		||||
              "to": [
 | 
			
		||||
                23.08,
 | 
			
		||||
                5.190000000000001
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "ToPoint"
 | 
			
		||||
            },
 | 
			
		||||
            "surface": {
 | 
			
		||||
              "faceId": "[uuid]",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                103,
 | 
			
		||||
                142,
 | 
			
		||||
                0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 141,
 | 
			
		||||
                "start": 135,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "seg01"
 | 
			
		||||
              },
 | 
			
		||||
              "type": "extrudePlane"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                135,
 | 
			
		||||
                141,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
        "artifactId": "[uuid]",
 | 
			
		||||
        "originalId": "[uuid]",
 | 
			
		||||
        "units": {
 | 
			
		||||
          "type": "Mm"
 | 
			
		||||
        },
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              67,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "height": 4.0,
 | 
			
		||||
      "startCapId": "[uuid]",
 | 
			
		||||
      "endCapId": "[uuid]",
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": [
 | 
			
		||||
        {
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            35,
 | 
			
		||||
            67,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  },
 | 
			
		||||
  "seg01": {
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "value": "seg01",
 | 
			
		||||
    "info": {
 | 
			
		||||
      "type": "TagEngineInfo",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "sketch": "[uuid]",
 | 
			
		||||
      "path": {
 | 
			
		||||
        "__geoMeta": {
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            103,
 | 
			
		||||
            142,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "from": [
 | 
			
		||||
          19.93,
 | 
			
		||||
          15.040000000000001
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 141,
 | 
			
		||||
          "start": 135,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "seg01"
 | 
			
		||||
        },
 | 
			
		||||
        "to": [
 | 
			
		||||
          23.08,
 | 
			
		||||
          5.190000000000001
 | 
			
		||||
        ],
 | 
			
		||||
        "type": "ToPoint"
 | 
			
		||||
      },
 | 
			
		||||
      "surface": {
 | 
			
		||||
        "faceId": "[uuid]",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          103,
 | 
			
		||||
          142,
 | 
			
		||||
          0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 141,
 | 
			
		||||
          "start": 135,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "seg01"
 | 
			
		||||
        },
 | 
			
		||||
        "type": "extrudePlane"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          135,
 | 
			
		||||
          141,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,172 +1,159 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing array_elem_pop.kcl
 | 
			
		||||
description: Variables in memory after executing array_elem_pop.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "arr": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 1.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    7,
 | 
			
		||||
                    8,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 2.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    10,
 | 
			
		||||
                    11,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 3.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    13,
 | 
			
		||||
                    14,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                6,
 | 
			
		||||
                15,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "new_arr1": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 1.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    7,
 | 
			
		||||
                    8,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 2.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    10,
 | 
			
		||||
                    11,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                27,
 | 
			
		||||
                35,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "new_arr2": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 1.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    7,
 | 
			
		||||
                    8,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                47,
 | 
			
		||||
                60,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "new_arr3": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                72,
 | 
			
		||||
                85,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "arr": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 1.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              7,
 | 
			
		||||
              8,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 2.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              10,
 | 
			
		||||
              11,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 3.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              13,
 | 
			
		||||
              14,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          6,
 | 
			
		||||
          15,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "new_arr1": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 1.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              7,
 | 
			
		||||
              8,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 2.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              10,
 | 
			
		||||
              11,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          27,
 | 
			
		||||
          35,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "new_arr2": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 1.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              7,
 | 
			
		||||
              8,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          47,
 | 
			
		||||
          60,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "new_arr3": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          72,
 | 
			
		||||
          85,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,237 +1,224 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing array_elem_push.kcl
 | 
			
		||||
description: Variables in memory after executing array_elem_push.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "arr": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 1.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    7,
 | 
			
		||||
                    8,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 2.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    10,
 | 
			
		||||
                    11,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 3.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    13,
 | 
			
		||||
                    14,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                6,
 | 
			
		||||
                15,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "new_arr1": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 1.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    7,
 | 
			
		||||
                    8,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 2.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    10,
 | 
			
		||||
                    11,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 3.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    13,
 | 
			
		||||
                    14,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 4.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    37,
 | 
			
		||||
                    38,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                27,
 | 
			
		||||
                39,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "new_arr2": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 1.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    7,
 | 
			
		||||
                    8,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 2.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    10,
 | 
			
		||||
                    11,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 3.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    13,
 | 
			
		||||
                    14,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 4.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    37,
 | 
			
		||||
                    38,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 5.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    66,
 | 
			
		||||
                    67,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                51,
 | 
			
		||||
                68,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "arr": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 1.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              7,
 | 
			
		||||
              8,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 2.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              10,
 | 
			
		||||
              11,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 3.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              13,
 | 
			
		||||
              14,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          6,
 | 
			
		||||
          15,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "new_arr1": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 1.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              7,
 | 
			
		||||
              8,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 2.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              10,
 | 
			
		||||
              11,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 3.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              13,
 | 
			
		||||
              14,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 4.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              37,
 | 
			
		||||
              38,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          27,
 | 
			
		||||
          39,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "new_arr2": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 1.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              7,
 | 
			
		||||
              8,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 2.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              10,
 | 
			
		||||
              11,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 3.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              13,
 | 
			
		||||
              14,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 4.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              37,
 | 
			
		||||
              38,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 5.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              66,
 | 
			
		||||
              67,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          51,
 | 
			
		||||
          68,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,394 +1,381 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing array_range_expr.kcl
 | 
			
		||||
description: Variables in memory after executing array_range_expr.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "five": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 5.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                175,
 | 
			
		||||
                188,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "four": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 4.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                79,
 | 
			
		||||
                80,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "r1": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    11,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 1,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    11,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 2,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    11,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 3,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    11,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 4,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    11,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                5,
 | 
			
		||||
                11,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "r2": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    95,
 | 
			
		||||
                    107,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 1,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    95,
 | 
			
		||||
                    107,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 2,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    95,
 | 
			
		||||
                    107,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 3,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    95,
 | 
			
		||||
                    107,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 4,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    95,
 | 
			
		||||
                    107,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                95,
 | 
			
		||||
                107,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "r3": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    194,
 | 
			
		||||
                    206,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 1,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    194,
 | 
			
		||||
                    206,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 2,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    194,
 | 
			
		||||
                    206,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 3,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    194,
 | 
			
		||||
                    206,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 4,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    194,
 | 
			
		||||
                    206,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 5,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    194,
 | 
			
		||||
                    206,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                194,
 | 
			
		||||
                206,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "r4": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 1,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    341,
 | 
			
		||||
                    373,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 2,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    341,
 | 
			
		||||
                    373,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 3,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    341,
 | 
			
		||||
                    373,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 4,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    341,
 | 
			
		||||
                    373,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                341,
 | 
			
		||||
                373,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "zero": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                88,
 | 
			
		||||
                89,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "five": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 5.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          175,
 | 
			
		||||
          188,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "four": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 4.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          79,
 | 
			
		||||
          80,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "r1": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              11,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 1,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              11,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 2,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              11,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 3,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              11,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 4,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              11,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          5,
 | 
			
		||||
          11,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "r2": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              95,
 | 
			
		||||
              107,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 1,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              95,
 | 
			
		||||
              107,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 2,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              95,
 | 
			
		||||
              107,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 3,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              95,
 | 
			
		||||
              107,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 4,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              95,
 | 
			
		||||
              107,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          95,
 | 
			
		||||
          107,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "r3": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              194,
 | 
			
		||||
              206,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 1,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              194,
 | 
			
		||||
              206,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 2,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              194,
 | 
			
		||||
              206,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 3,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              194,
 | 
			
		||||
              206,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 4,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              194,
 | 
			
		||||
              206,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 5,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              194,
 | 
			
		||||
              206,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          194,
 | 
			
		||||
          206,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "r4": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 1,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              341,
 | 
			
		||||
              373,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 2,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              341,
 | 
			
		||||
              373,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 3,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              341,
 | 
			
		||||
              373,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 4,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              341,
 | 
			
		||||
              373,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          341,
 | 
			
		||||
          373,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "zero": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          88,
 | 
			
		||||
          89,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,196 +1,183 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing array_range_negative_expr.kcl
 | 
			
		||||
description: Variables in memory after executing array_range_negative_expr.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "xs": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": -5,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    19,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": -4,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    19,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": -3,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    19,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": -2,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    19,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": -1,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    19,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    19,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 1,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    19,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 2,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    19,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 3,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    19,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 4,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    19,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 5,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    5,
 | 
			
		||||
                    19,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                5,
 | 
			
		||||
                19,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "xs": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": -5,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              19,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": -4,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              19,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": -3,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              19,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": -2,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              19,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": -1,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              19,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              19,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 1,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              19,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 2,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              19,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 3,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              19,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 4,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              19,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 5,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              5,
 | 
			
		||||
              19,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          5,
 | 
			
		||||
          19,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,228 +1,214 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing artifact_graph_example_code_offset_planes.kcl
 | 
			
		||||
snapshot_kind: text
 | 
			
		||||
description: Variables in memory after executing artifact_graph_example_code_offset_planes.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "offsetPlane001": {
 | 
			
		||||
          "type": "Plane",
 | 
			
		||||
          "value": {
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "offsetPlane001": {
 | 
			
		||||
    "type": "Plane",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "value": "Custom",
 | 
			
		||||
      "origin": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 20.0
 | 
			
		||||
      },
 | 
			
		||||
      "xAxis": {
 | 
			
		||||
        "x": 1.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "yAxis": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 1.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "zAxis": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 1.0
 | 
			
		||||
      },
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "offsetPlane002": {
 | 
			
		||||
    "type": "Plane",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "value": "Custom",
 | 
			
		||||
      "origin": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 50.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "xAxis": {
 | 
			
		||||
        "x": 1.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "yAxis": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 1.0
 | 
			
		||||
      },
 | 
			
		||||
      "zAxis": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": -1.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "offsetPlane003": {
 | 
			
		||||
    "type": "Plane",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "value": "Custom",
 | 
			
		||||
      "origin": {
 | 
			
		||||
        "x": 10.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "xAxis": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 1.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "yAxis": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 1.0
 | 
			
		||||
      },
 | 
			
		||||
      "zAxis": {
 | 
			
		||||
        "x": 1.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "sketch002": {
 | 
			
		||||
    "type": "Sketch",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "type": "Sketch",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "paths": [
 | 
			
		||||
        {
 | 
			
		||||
          "__geoMeta": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": "Custom",
 | 
			
		||||
            "origin": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 20.0
 | 
			
		||||
            },
 | 
			
		||||
            "xAxis": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 0.0
 | 
			
		||||
            },
 | 
			
		||||
            "yAxis": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 0.0
 | 
			
		||||
            },
 | 
			
		||||
            "zAxis": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": []
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "offsetPlane002": {
 | 
			
		||||
          "type": "Plane",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": "Custom",
 | 
			
		||||
            "origin": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 50.0,
 | 
			
		||||
              "z": 0.0
 | 
			
		||||
            },
 | 
			
		||||
            "xAxis": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 0.0
 | 
			
		||||
            },
 | 
			
		||||
            "yAxis": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "zAxis": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": -1.0,
 | 
			
		||||
              "z": 0.0
 | 
			
		||||
            },
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": []
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "offsetPlane003": {
 | 
			
		||||
          "type": "Plane",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": "Custom",
 | 
			
		||||
            "origin": {
 | 
			
		||||
              "x": 10.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 0.0
 | 
			
		||||
            },
 | 
			
		||||
            "xAxis": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 0.0
 | 
			
		||||
            },
 | 
			
		||||
            "yAxis": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "zAxis": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 0.0
 | 
			
		||||
            },
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": []
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sketch002": {
 | 
			
		||||
          "type": "Sketch",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Sketch",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "paths": [
 | 
			
		||||
              {
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    197,
 | 
			
		||||
                    222,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "from": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "to": [
 | 
			
		||||
                  6.78,
 | 
			
		||||
                  15.01
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "ToPoint"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "on": {
 | 
			
		||||
              "type": "plane",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "value": "Custom",
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 20.0
 | 
			
		||||
              },
 | 
			
		||||
              "xAxis": {
 | 
			
		||||
                "x": 1.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "yAxis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 1.0,
 | 
			
		||||
                "z": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "zAxis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": []
 | 
			
		||||
            },
 | 
			
		||||
            "start": {
 | 
			
		||||
              "from": [
 | 
			
		||||
                0.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "to": [
 | 
			
		||||
                0.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": null,
 | 
			
		||||
              "__geoMeta": {
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  166,
 | 
			
		||||
                  191,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "originalId": "[uuid]",
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  166,
 | 
			
		||||
                  191,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              197,
 | 
			
		||||
              222,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
          },
 | 
			
		||||
          "from": [
 | 
			
		||||
            0.0,
 | 
			
		||||
            0.0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "to": [
 | 
			
		||||
            6.78,
 | 
			
		||||
            15.01
 | 
			
		||||
          ],
 | 
			
		||||
          "type": "ToPoint"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "on": {
 | 
			
		||||
        "type": "plane",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "artifactId": "[uuid]",
 | 
			
		||||
        "value": "Custom",
 | 
			
		||||
        "origin": {
 | 
			
		||||
          "x": 0.0,
 | 
			
		||||
          "y": 0.0,
 | 
			
		||||
          "z": 20.0
 | 
			
		||||
        },
 | 
			
		||||
        "xAxis": {
 | 
			
		||||
          "x": 1.0,
 | 
			
		||||
          "y": 0.0,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "yAxis": {
 | 
			
		||||
          "x": 0.0,
 | 
			
		||||
          "y": 1.0,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "zAxis": {
 | 
			
		||||
          "x": 0.0,
 | 
			
		||||
          "y": 0.0,
 | 
			
		||||
          "z": 1.0
 | 
			
		||||
        },
 | 
			
		||||
        "units": {
 | 
			
		||||
          "type": "Mm"
 | 
			
		||||
        },
 | 
			
		||||
        "__meta": []
 | 
			
		||||
      },
 | 
			
		||||
      "start": {
 | 
			
		||||
        "from": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          0.0
 | 
			
		||||
        ],
 | 
			
		||||
        "to": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          0.0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": null,
 | 
			
		||||
        "__geoMeta": {
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            166,
 | 
			
		||||
            191,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "originalId": "[uuid]",
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": [
 | 
			
		||||
        {
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            166,
 | 
			
		||||
            191,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,39 +1,268 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing basic_fillet_cube_end.kcl
 | 
			
		||||
description: Variables in memory after executing basic_fillet_cube_end.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "part001": {
 | 
			
		||||
    "type": "Solid",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "type": "Solid",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "value": [
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            66,
 | 
			
		||||
            99,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": {
 | 
			
		||||
            "end": 98,
 | 
			
		||||
            "start": 92,
 | 
			
		||||
            "type": "TagDeclarator",
 | 
			
		||||
            "value": "thing"
 | 
			
		||||
          },
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            105,
 | 
			
		||||
            124,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            130,
 | 
			
		||||
            165,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": {
 | 
			
		||||
            "end": 164,
 | 
			
		||||
            "start": 157,
 | 
			
		||||
            "type": "TagDeclarator",
 | 
			
		||||
            "value": "thing2"
 | 
			
		||||
          },
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            171,
 | 
			
		||||
            179,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "sketch": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "paths": [
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                66,
 | 
			
		||||
                99,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": {
 | 
			
		||||
              "end": 98,
 | 
			
		||||
              "start": 92,
 | 
			
		||||
              "type": "TagDeclarator",
 | 
			
		||||
              "value": "thing"
 | 
			
		||||
            },
 | 
			
		||||
            "to": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              10.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                105,
 | 
			
		||||
                124,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              10.0
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              10.0,
 | 
			
		||||
              10.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                130,
 | 
			
		||||
                165,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              10.0,
 | 
			
		||||
              10.0
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": {
 | 
			
		||||
              "end": 164,
 | 
			
		||||
              "start": 157,
 | 
			
		||||
              "type": "TagDeclarator",
 | 
			
		||||
              "value": "thing2"
 | 
			
		||||
            },
 | 
			
		||||
            "to": [
 | 
			
		||||
              10.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                171,
 | 
			
		||||
                179,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              10.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "on": {
 | 
			
		||||
          "type": "plane",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "artifactId": "[uuid]",
 | 
			
		||||
          "value": "XY",
 | 
			
		||||
          "origin": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "xAxis": {
 | 
			
		||||
            "x": 1.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "yAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 1.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "zAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 1.0
 | 
			
		||||
          },
 | 
			
		||||
          "units": {
 | 
			
		||||
            "type": "Mm"
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "part001": {
 | 
			
		||||
          "type": "Solid",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
        "start": {
 | 
			
		||||
          "from": [
 | 
			
		||||
            0.0,
 | 
			
		||||
            0.0
 | 
			
		||||
          ],
 | 
			
		||||
          "to": [
 | 
			
		||||
            0.0,
 | 
			
		||||
            0.0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "__geoMeta": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": [
 | 
			
		||||
              {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              60,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "tags": {
 | 
			
		||||
          "thing": {
 | 
			
		||||
            "type": "TagIdentifier",
 | 
			
		||||
            "value": "thing",
 | 
			
		||||
            "info": {
 | 
			
		||||
              "type": "TagEngineInfo",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sketch": "[uuid]",
 | 
			
		||||
              "path": {
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    66,
 | 
			
		||||
                    99,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "from": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": {
 | 
			
		||||
                  "end": 98,
 | 
			
		||||
                  "start": 92,
 | 
			
		||||
                  "type": "TagDeclarator",
 | 
			
		||||
                  "value": "thing"
 | 
			
		||||
                },
 | 
			
		||||
                "to": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  10.0
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "ToPoint"
 | 
			
		||||
              },
 | 
			
		||||
              "surface": {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
@ -48,19 +277,51 @@ description: Program memory after executing basic_fillet_cube_end.kcl
 | 
			
		||||
                  "value": "thing"
 | 
			
		||||
                },
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  105,
 | 
			
		||||
                  124,
 | 
			
		||||
                  92,
 | 
			
		||||
                  98,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          "thing2": {
 | 
			
		||||
            "type": "TagIdentifier",
 | 
			
		||||
            "value": "thing2",
 | 
			
		||||
            "info": {
 | 
			
		||||
              "type": "TagEngineInfo",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sketch": "[uuid]",
 | 
			
		||||
              "path": {
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    130,
 | 
			
		||||
                    165,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "from": [
 | 
			
		||||
                  10.0,
 | 
			
		||||
                  10.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
                "tag": {
 | 
			
		||||
                  "end": 164,
 | 
			
		||||
                  "start": 157,
 | 
			
		||||
                  "type": "TagDeclarator",
 | 
			
		||||
                  "value": "thing2"
 | 
			
		||||
                },
 | 
			
		||||
                "to": [
 | 
			
		||||
                  10.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "ToPoint"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
              "surface": {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
@ -75,459 +336,185 @@ description: Program memory after executing basic_fillet_cube_end.kcl
 | 
			
		||||
                  "value": "thing2"
 | 
			
		||||
                },
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  171,
 | 
			
		||||
                  179,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "sketch": {
 | 
			
		||||
              "type": "Sketch",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "paths": [
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      66,
 | 
			
		||||
                      99,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": {
 | 
			
		||||
                    "end": 98,
 | 
			
		||||
                    "start": 92,
 | 
			
		||||
                    "type": "TagDeclarator",
 | 
			
		||||
                    "value": "thing"
 | 
			
		||||
                  },
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    10.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      105,
 | 
			
		||||
                      124,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    10.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    10.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      130,
 | 
			
		||||
                      165,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    10.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": {
 | 
			
		||||
                    "end": 164,
 | 
			
		||||
                    "start": 157,
 | 
			
		||||
                    "type": "TagDeclarator",
 | 
			
		||||
                    "value": "thing2"
 | 
			
		||||
                  },
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      171,
 | 
			
		||||
                      179,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "on": {
 | 
			
		||||
                "type": "plane",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "artifactId": "[uuid]",
 | 
			
		||||
                "value": "XY",
 | 
			
		||||
                "origin": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "xAxis": {
 | 
			
		||||
                  "x": 1.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "yAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 1.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "zAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 1.0
 | 
			
		||||
                },
 | 
			
		||||
                "units": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "__meta": []
 | 
			
		||||
              },
 | 
			
		||||
              "start": {
 | 
			
		||||
                "from": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "to": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    60,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "tags": {
 | 
			
		||||
                "thing": {
 | 
			
		||||
                  "type": "TagIdentifier",
 | 
			
		||||
                  "value": "thing",
 | 
			
		||||
                  "info": {
 | 
			
		||||
                    "type": "TagEngineInfo",
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sketch": "[uuid]",
 | 
			
		||||
                    "path": {
 | 
			
		||||
                      "__geoMeta": {
 | 
			
		||||
                        "id": "[uuid]",
 | 
			
		||||
                        "sourceRange": [
 | 
			
		||||
                          66,
 | 
			
		||||
                          99,
 | 
			
		||||
                          0
 | 
			
		||||
                        ]
 | 
			
		||||
                      },
 | 
			
		||||
                      "from": [
 | 
			
		||||
                        0.0,
 | 
			
		||||
                        0.0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 98,
 | 
			
		||||
                        "start": 92,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "thing"
 | 
			
		||||
                      },
 | 
			
		||||
                      "to": [
 | 
			
		||||
                        0.0,
 | 
			
		||||
                        10.0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "type": "ToPoint"
 | 
			
		||||
                    },
 | 
			
		||||
                    "surface": {
 | 
			
		||||
                      "faceId": "[uuid]",
 | 
			
		||||
                      "id": "[uuid]",
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        66,
 | 
			
		||||
                        99,
 | 
			
		||||
                        0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 98,
 | 
			
		||||
                        "start": 92,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "thing"
 | 
			
		||||
                      },
 | 
			
		||||
                      "type": "extrudePlane"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "__meta": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        92,
 | 
			
		||||
                        98,
 | 
			
		||||
                        0
 | 
			
		||||
                      ]
 | 
			
		||||
                    }
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "thing2": {
 | 
			
		||||
                  "type": "TagIdentifier",
 | 
			
		||||
                  "value": "thing2",
 | 
			
		||||
                  "info": {
 | 
			
		||||
                    "type": "TagEngineInfo",
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sketch": "[uuid]",
 | 
			
		||||
                    "path": {
 | 
			
		||||
                      "__geoMeta": {
 | 
			
		||||
                        "id": "[uuid]",
 | 
			
		||||
                        "sourceRange": [
 | 
			
		||||
                          130,
 | 
			
		||||
                          165,
 | 
			
		||||
                          0
 | 
			
		||||
                        ]
 | 
			
		||||
                      },
 | 
			
		||||
                      "from": [
 | 
			
		||||
                        10.0,
 | 
			
		||||
                        10.0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 164,
 | 
			
		||||
                        "start": 157,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "thing2"
 | 
			
		||||
                      },
 | 
			
		||||
                      "to": [
 | 
			
		||||
                        10.0,
 | 
			
		||||
                        0.0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "type": "ToPoint"
 | 
			
		||||
                    },
 | 
			
		||||
                    "surface": {
 | 
			
		||||
                      "faceId": "[uuid]",
 | 
			
		||||
                      "id": "[uuid]",
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        130,
 | 
			
		||||
                        165,
 | 
			
		||||
                        0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 164,
 | 
			
		||||
                        "start": 157,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "thing2"
 | 
			
		||||
                      },
 | 
			
		||||
                      "type": "extrudePlane"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "__meta": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        157,
 | 
			
		||||
                        164,
 | 
			
		||||
                        0
 | 
			
		||||
                      ]
 | 
			
		||||
                    }
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "originalId": "[uuid]",
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    60,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "height": 10.0,
 | 
			
		||||
            "startCapId": "[uuid]",
 | 
			
		||||
            "endCapId": "[uuid]",
 | 
			
		||||
            "edgeCuts": [
 | 
			
		||||
              {
 | 
			
		||||
                "type": "fillet",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "radius": 2.0,
 | 
			
		||||
                "edgeId": "[uuid]",
 | 
			
		||||
                "tag": null
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "type": "fillet",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "radius": 2.0,
 | 
			
		||||
                "edgeId": "[uuid]",
 | 
			
		||||
                "tag": null
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  35,
 | 
			
		||||
                  60,
 | 
			
		||||
                  157,
 | 
			
		||||
                  164,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "thing": {
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "value": "thing",
 | 
			
		||||
          "info": {
 | 
			
		||||
            "type": "TagEngineInfo",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "sketch": "[uuid]",
 | 
			
		||||
            "path": {
 | 
			
		||||
              "__geoMeta": {
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  66,
 | 
			
		||||
                  99,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              },
 | 
			
		||||
              "from": [
 | 
			
		||||
                0.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 98,
 | 
			
		||||
                "start": 92,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "thing"
 | 
			
		||||
              },
 | 
			
		||||
              "to": [
 | 
			
		||||
                0.0,
 | 
			
		||||
                10.0
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "ToPoint"
 | 
			
		||||
            },
 | 
			
		||||
            "surface": {
 | 
			
		||||
              "faceId": "[uuid]",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                66,
 | 
			
		||||
                99,
 | 
			
		||||
                0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 98,
 | 
			
		||||
                "start": 92,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "thing"
 | 
			
		||||
              },
 | 
			
		||||
              "type": "extrudePlane"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                92,
 | 
			
		||||
                98,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        "artifactId": "[uuid]",
 | 
			
		||||
        "originalId": "[uuid]",
 | 
			
		||||
        "units": {
 | 
			
		||||
          "type": "Mm"
 | 
			
		||||
        },
 | 
			
		||||
        "thing2": {
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "value": "thing2",
 | 
			
		||||
          "info": {
 | 
			
		||||
            "type": "TagEngineInfo",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "sketch": "[uuid]",
 | 
			
		||||
            "path": {
 | 
			
		||||
              "__geoMeta": {
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  130,
 | 
			
		||||
                  165,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              },
 | 
			
		||||
              "from": [
 | 
			
		||||
                10.0,
 | 
			
		||||
                10.0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 164,
 | 
			
		||||
                "start": 157,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "thing2"
 | 
			
		||||
              },
 | 
			
		||||
              "to": [
 | 
			
		||||
                10.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "ToPoint"
 | 
			
		||||
            },
 | 
			
		||||
            "surface": {
 | 
			
		||||
              "faceId": "[uuid]",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                130,
 | 
			
		||||
                165,
 | 
			
		||||
                0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 164,
 | 
			
		||||
                "start": 157,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "thing2"
 | 
			
		||||
              },
 | 
			
		||||
              "type": "extrudePlane"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                157,
 | 
			
		||||
                164,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              60,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "height": 10.0,
 | 
			
		||||
      "startCapId": "[uuid]",
 | 
			
		||||
      "endCapId": "[uuid]",
 | 
			
		||||
      "edgeCuts": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "fillet",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "radius": 2.0,
 | 
			
		||||
          "edgeId": "[uuid]",
 | 
			
		||||
          "tag": null
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "fillet",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "radius": 2.0,
 | 
			
		||||
          "edgeId": "[uuid]",
 | 
			
		||||
          "tag": null
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": [
 | 
			
		||||
        {
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            35,
 | 
			
		||||
            60,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  },
 | 
			
		||||
  "thing": {
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "value": "thing",
 | 
			
		||||
    "info": {
 | 
			
		||||
      "type": "TagEngineInfo",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "sketch": "[uuid]",
 | 
			
		||||
      "path": {
 | 
			
		||||
        "__geoMeta": {
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            66,
 | 
			
		||||
            99,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "from": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          0.0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 98,
 | 
			
		||||
          "start": 92,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "thing"
 | 
			
		||||
        },
 | 
			
		||||
        "to": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          10.0
 | 
			
		||||
        ],
 | 
			
		||||
        "type": "ToPoint"
 | 
			
		||||
      },
 | 
			
		||||
      "surface": {
 | 
			
		||||
        "faceId": "[uuid]",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          66,
 | 
			
		||||
          99,
 | 
			
		||||
          0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 98,
 | 
			
		||||
          "start": 92,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "thing"
 | 
			
		||||
        },
 | 
			
		||||
        "type": "extrudePlane"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          92,
 | 
			
		||||
          98,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "thing2": {
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "value": "thing2",
 | 
			
		||||
    "info": {
 | 
			
		||||
      "type": "TagEngineInfo",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "sketch": "[uuid]",
 | 
			
		||||
      "path": {
 | 
			
		||||
        "__geoMeta": {
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            130,
 | 
			
		||||
            165,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "from": [
 | 
			
		||||
          10.0,
 | 
			
		||||
          10.0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 164,
 | 
			
		||||
          "start": 157,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "thing2"
 | 
			
		||||
        },
 | 
			
		||||
        "to": [
 | 
			
		||||
          10.0,
 | 
			
		||||
          0.0
 | 
			
		||||
        ],
 | 
			
		||||
        "type": "ToPoint"
 | 
			
		||||
      },
 | 
			
		||||
      "surface": {
 | 
			
		||||
        "faceId": "[uuid]",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          130,
 | 
			
		||||
          165,
 | 
			
		||||
          0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 164,
 | 
			
		||||
          "start": 157,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "thing2"
 | 
			
		||||
        },
 | 
			
		||||
        "type": "extrudePlane"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          157,
 | 
			
		||||
          164,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,39 +1,268 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing basic_fillet_cube_start.kcl
 | 
			
		||||
description: Variables in memory after executing basic_fillet_cube_start.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "part001": {
 | 
			
		||||
    "type": "Solid",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "type": "Solid",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "value": [
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            66,
 | 
			
		||||
            99,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": {
 | 
			
		||||
            "end": 98,
 | 
			
		||||
            "start": 92,
 | 
			
		||||
            "type": "TagDeclarator",
 | 
			
		||||
            "value": "thing"
 | 
			
		||||
          },
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            105,
 | 
			
		||||
            124,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            130,
 | 
			
		||||
            165,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": {
 | 
			
		||||
            "end": 164,
 | 
			
		||||
            "start": 157,
 | 
			
		||||
            "type": "TagDeclarator",
 | 
			
		||||
            "value": "thing2"
 | 
			
		||||
          },
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            171,
 | 
			
		||||
            179,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "sketch": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "paths": [
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                66,
 | 
			
		||||
                99,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": {
 | 
			
		||||
              "end": 98,
 | 
			
		||||
              "start": 92,
 | 
			
		||||
              "type": "TagDeclarator",
 | 
			
		||||
              "value": "thing"
 | 
			
		||||
            },
 | 
			
		||||
            "to": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              10.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                105,
 | 
			
		||||
                124,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              10.0
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              10.0,
 | 
			
		||||
              10.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                130,
 | 
			
		||||
                165,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              10.0,
 | 
			
		||||
              10.0
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": {
 | 
			
		||||
              "end": 164,
 | 
			
		||||
              "start": 157,
 | 
			
		||||
              "type": "TagDeclarator",
 | 
			
		||||
              "value": "thing2"
 | 
			
		||||
            },
 | 
			
		||||
            "to": [
 | 
			
		||||
              10.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                171,
 | 
			
		||||
                179,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              10.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "on": {
 | 
			
		||||
          "type": "plane",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "artifactId": "[uuid]",
 | 
			
		||||
          "value": "XY",
 | 
			
		||||
          "origin": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "xAxis": {
 | 
			
		||||
            "x": 1.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "yAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 1.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "zAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 1.0
 | 
			
		||||
          },
 | 
			
		||||
          "units": {
 | 
			
		||||
            "type": "Mm"
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "part001": {
 | 
			
		||||
          "type": "Solid",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
        "start": {
 | 
			
		||||
          "from": [
 | 
			
		||||
            0.0,
 | 
			
		||||
            0.0
 | 
			
		||||
          ],
 | 
			
		||||
          "to": [
 | 
			
		||||
            0.0,
 | 
			
		||||
            0.0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "__geoMeta": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": [
 | 
			
		||||
              {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              60,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "tags": {
 | 
			
		||||
          "thing": {
 | 
			
		||||
            "type": "TagIdentifier",
 | 
			
		||||
            "value": "thing",
 | 
			
		||||
            "info": {
 | 
			
		||||
              "type": "TagEngineInfo",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sketch": "[uuid]",
 | 
			
		||||
              "path": {
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    66,
 | 
			
		||||
                    99,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "from": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": {
 | 
			
		||||
                  "end": 98,
 | 
			
		||||
                  "start": 92,
 | 
			
		||||
                  "type": "TagDeclarator",
 | 
			
		||||
                  "value": "thing"
 | 
			
		||||
                },
 | 
			
		||||
                "to": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  10.0
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "ToPoint"
 | 
			
		||||
              },
 | 
			
		||||
              "surface": {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
@ -48,19 +277,51 @@ description: Program memory after executing basic_fillet_cube_start.kcl
 | 
			
		||||
                  "value": "thing"
 | 
			
		||||
                },
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  105,
 | 
			
		||||
                  124,
 | 
			
		||||
                  92,
 | 
			
		||||
                  98,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          "thing2": {
 | 
			
		||||
            "type": "TagIdentifier",
 | 
			
		||||
            "value": "thing2",
 | 
			
		||||
            "info": {
 | 
			
		||||
              "type": "TagEngineInfo",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sketch": "[uuid]",
 | 
			
		||||
              "path": {
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    130,
 | 
			
		||||
                    165,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "from": [
 | 
			
		||||
                  10.0,
 | 
			
		||||
                  10.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
                "tag": {
 | 
			
		||||
                  "end": 164,
 | 
			
		||||
                  "start": 157,
 | 
			
		||||
                  "type": "TagDeclarator",
 | 
			
		||||
                  "value": "thing2"
 | 
			
		||||
                },
 | 
			
		||||
                "to": [
 | 
			
		||||
                  10.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "ToPoint"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
              "surface": {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
@ -75,459 +336,185 @@ description: Program memory after executing basic_fillet_cube_start.kcl
 | 
			
		||||
                  "value": "thing2"
 | 
			
		||||
                },
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  171,
 | 
			
		||||
                  179,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "sketch": {
 | 
			
		||||
              "type": "Sketch",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "paths": [
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      66,
 | 
			
		||||
                      99,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": {
 | 
			
		||||
                    "end": 98,
 | 
			
		||||
                    "start": 92,
 | 
			
		||||
                    "type": "TagDeclarator",
 | 
			
		||||
                    "value": "thing"
 | 
			
		||||
                  },
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    10.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      105,
 | 
			
		||||
                      124,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    10.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    10.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      130,
 | 
			
		||||
                      165,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    10.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": {
 | 
			
		||||
                    "end": 164,
 | 
			
		||||
                    "start": 157,
 | 
			
		||||
                    "type": "TagDeclarator",
 | 
			
		||||
                    "value": "thing2"
 | 
			
		||||
                  },
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      171,
 | 
			
		||||
                      179,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "on": {
 | 
			
		||||
                "type": "plane",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "artifactId": "[uuid]",
 | 
			
		||||
                "value": "XY",
 | 
			
		||||
                "origin": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "xAxis": {
 | 
			
		||||
                  "x": 1.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "yAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 1.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "zAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 1.0
 | 
			
		||||
                },
 | 
			
		||||
                "units": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "__meta": []
 | 
			
		||||
              },
 | 
			
		||||
              "start": {
 | 
			
		||||
                "from": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "to": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    60,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "tags": {
 | 
			
		||||
                "thing": {
 | 
			
		||||
                  "type": "TagIdentifier",
 | 
			
		||||
                  "value": "thing",
 | 
			
		||||
                  "info": {
 | 
			
		||||
                    "type": "TagEngineInfo",
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sketch": "[uuid]",
 | 
			
		||||
                    "path": {
 | 
			
		||||
                      "__geoMeta": {
 | 
			
		||||
                        "id": "[uuid]",
 | 
			
		||||
                        "sourceRange": [
 | 
			
		||||
                          66,
 | 
			
		||||
                          99,
 | 
			
		||||
                          0
 | 
			
		||||
                        ]
 | 
			
		||||
                      },
 | 
			
		||||
                      "from": [
 | 
			
		||||
                        0.0,
 | 
			
		||||
                        0.0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 98,
 | 
			
		||||
                        "start": 92,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "thing"
 | 
			
		||||
                      },
 | 
			
		||||
                      "to": [
 | 
			
		||||
                        0.0,
 | 
			
		||||
                        10.0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "type": "ToPoint"
 | 
			
		||||
                    },
 | 
			
		||||
                    "surface": {
 | 
			
		||||
                      "faceId": "[uuid]",
 | 
			
		||||
                      "id": "[uuid]",
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        66,
 | 
			
		||||
                        99,
 | 
			
		||||
                        0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 98,
 | 
			
		||||
                        "start": 92,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "thing"
 | 
			
		||||
                      },
 | 
			
		||||
                      "type": "extrudePlane"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "__meta": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        92,
 | 
			
		||||
                        98,
 | 
			
		||||
                        0
 | 
			
		||||
                      ]
 | 
			
		||||
                    }
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "thing2": {
 | 
			
		||||
                  "type": "TagIdentifier",
 | 
			
		||||
                  "value": "thing2",
 | 
			
		||||
                  "info": {
 | 
			
		||||
                    "type": "TagEngineInfo",
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sketch": "[uuid]",
 | 
			
		||||
                    "path": {
 | 
			
		||||
                      "__geoMeta": {
 | 
			
		||||
                        "id": "[uuid]",
 | 
			
		||||
                        "sourceRange": [
 | 
			
		||||
                          130,
 | 
			
		||||
                          165,
 | 
			
		||||
                          0
 | 
			
		||||
                        ]
 | 
			
		||||
                      },
 | 
			
		||||
                      "from": [
 | 
			
		||||
                        10.0,
 | 
			
		||||
                        10.0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 164,
 | 
			
		||||
                        "start": 157,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "thing2"
 | 
			
		||||
                      },
 | 
			
		||||
                      "to": [
 | 
			
		||||
                        10.0,
 | 
			
		||||
                        0.0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "type": "ToPoint"
 | 
			
		||||
                    },
 | 
			
		||||
                    "surface": {
 | 
			
		||||
                      "faceId": "[uuid]",
 | 
			
		||||
                      "id": "[uuid]",
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        130,
 | 
			
		||||
                        165,
 | 
			
		||||
                        0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 164,
 | 
			
		||||
                        "start": 157,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "thing2"
 | 
			
		||||
                      },
 | 
			
		||||
                      "type": "extrudePlane"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "__meta": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        157,
 | 
			
		||||
                        164,
 | 
			
		||||
                        0
 | 
			
		||||
                      ]
 | 
			
		||||
                    }
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "originalId": "[uuid]",
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    60,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "height": 10.0,
 | 
			
		||||
            "startCapId": "[uuid]",
 | 
			
		||||
            "endCapId": "[uuid]",
 | 
			
		||||
            "edgeCuts": [
 | 
			
		||||
              {
 | 
			
		||||
                "type": "fillet",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "radius": 2.0,
 | 
			
		||||
                "edgeId": "[uuid]",
 | 
			
		||||
                "tag": null
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "type": "fillet",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "radius": 2.0,
 | 
			
		||||
                "edgeId": "[uuid]",
 | 
			
		||||
                "tag": null
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  35,
 | 
			
		||||
                  60,
 | 
			
		||||
                  157,
 | 
			
		||||
                  164,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "thing": {
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "value": "thing",
 | 
			
		||||
          "info": {
 | 
			
		||||
            "type": "TagEngineInfo",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "sketch": "[uuid]",
 | 
			
		||||
            "path": {
 | 
			
		||||
              "__geoMeta": {
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  66,
 | 
			
		||||
                  99,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              },
 | 
			
		||||
              "from": [
 | 
			
		||||
                0.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 98,
 | 
			
		||||
                "start": 92,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "thing"
 | 
			
		||||
              },
 | 
			
		||||
              "to": [
 | 
			
		||||
                0.0,
 | 
			
		||||
                10.0
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "ToPoint"
 | 
			
		||||
            },
 | 
			
		||||
            "surface": {
 | 
			
		||||
              "faceId": "[uuid]",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                66,
 | 
			
		||||
                99,
 | 
			
		||||
                0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 98,
 | 
			
		||||
                "start": 92,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "thing"
 | 
			
		||||
              },
 | 
			
		||||
              "type": "extrudePlane"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                92,
 | 
			
		||||
                98,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        "artifactId": "[uuid]",
 | 
			
		||||
        "originalId": "[uuid]",
 | 
			
		||||
        "units": {
 | 
			
		||||
          "type": "Mm"
 | 
			
		||||
        },
 | 
			
		||||
        "thing2": {
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "value": "thing2",
 | 
			
		||||
          "info": {
 | 
			
		||||
            "type": "TagEngineInfo",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "sketch": "[uuid]",
 | 
			
		||||
            "path": {
 | 
			
		||||
              "__geoMeta": {
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  130,
 | 
			
		||||
                  165,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              },
 | 
			
		||||
              "from": [
 | 
			
		||||
                10.0,
 | 
			
		||||
                10.0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 164,
 | 
			
		||||
                "start": 157,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "thing2"
 | 
			
		||||
              },
 | 
			
		||||
              "to": [
 | 
			
		||||
                10.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "ToPoint"
 | 
			
		||||
            },
 | 
			
		||||
            "surface": {
 | 
			
		||||
              "faceId": "[uuid]",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                130,
 | 
			
		||||
                165,
 | 
			
		||||
                0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 164,
 | 
			
		||||
                "start": 157,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "thing2"
 | 
			
		||||
              },
 | 
			
		||||
              "type": "extrudePlane"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                157,
 | 
			
		||||
                164,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              60,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "height": 10.0,
 | 
			
		||||
      "startCapId": "[uuid]",
 | 
			
		||||
      "endCapId": "[uuid]",
 | 
			
		||||
      "edgeCuts": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "fillet",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "radius": 2.0,
 | 
			
		||||
          "edgeId": "[uuid]",
 | 
			
		||||
          "tag": null
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "fillet",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "radius": 2.0,
 | 
			
		||||
          "edgeId": "[uuid]",
 | 
			
		||||
          "tag": null
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": [
 | 
			
		||||
        {
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            35,
 | 
			
		||||
            60,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  },
 | 
			
		||||
  "thing": {
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "value": "thing",
 | 
			
		||||
    "info": {
 | 
			
		||||
      "type": "TagEngineInfo",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "sketch": "[uuid]",
 | 
			
		||||
      "path": {
 | 
			
		||||
        "__geoMeta": {
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            66,
 | 
			
		||||
            99,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "from": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          0.0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 98,
 | 
			
		||||
          "start": 92,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "thing"
 | 
			
		||||
        },
 | 
			
		||||
        "to": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          10.0
 | 
			
		||||
        ],
 | 
			
		||||
        "type": "ToPoint"
 | 
			
		||||
      },
 | 
			
		||||
      "surface": {
 | 
			
		||||
        "faceId": "[uuid]",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          66,
 | 
			
		||||
          99,
 | 
			
		||||
          0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 98,
 | 
			
		||||
          "start": 92,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "thing"
 | 
			
		||||
        },
 | 
			
		||||
        "type": "extrudePlane"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          92,
 | 
			
		||||
          98,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "thing2": {
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "value": "thing2",
 | 
			
		||||
    "info": {
 | 
			
		||||
      "type": "TagEngineInfo",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "sketch": "[uuid]",
 | 
			
		||||
      "path": {
 | 
			
		||||
        "__geoMeta": {
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            130,
 | 
			
		||||
            165,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "from": [
 | 
			
		||||
          10.0,
 | 
			
		||||
          10.0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 164,
 | 
			
		||||
          "start": 157,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "thing2"
 | 
			
		||||
        },
 | 
			
		||||
        "to": [
 | 
			
		||||
          10.0,
 | 
			
		||||
          0.0
 | 
			
		||||
        ],
 | 
			
		||||
        "type": "ToPoint"
 | 
			
		||||
      },
 | 
			
		||||
      "surface": {
 | 
			
		||||
        "faceId": "[uuid]",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          130,
 | 
			
		||||
          165,
 | 
			
		||||
          0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 164,
 | 
			
		||||
          "start": 157,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "thing2"
 | 
			
		||||
        },
 | 
			
		||||
        "type": "extrudePlane"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          157,
 | 
			
		||||
          164,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,39 +1,227 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing big_number_angle_to_match_length_x.kcl
 | 
			
		||||
description: Variables in memory after executing big_number_angle_to_match_length_x.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "part001": {
 | 
			
		||||
    "type": "Solid",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "type": "Solid",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "value": [
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            66,
 | 
			
		||||
            101,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": {
 | 
			
		||||
            "end": 100,
 | 
			
		||||
            "start": 94,
 | 
			
		||||
            "type": "TagDeclarator",
 | 
			
		||||
            "value": "seg01"
 | 
			
		||||
          },
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            107,
 | 
			
		||||
            163,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            169,
 | 
			
		||||
            177,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "sketch": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "paths": [
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                66,
 | 
			
		||||
                101,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": {
 | 
			
		||||
              "end": 100,
 | 
			
		||||
              "start": 94,
 | 
			
		||||
              "type": "TagDeclarator",
 | 
			
		||||
              "value": "seg01"
 | 
			
		||||
            },
 | 
			
		||||
            "to": [
 | 
			
		||||
              1.0,
 | 
			
		||||
              3.82
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                107,
 | 
			
		||||
                163,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              1.0,
 | 
			
		||||
              3.82
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              3.0,
 | 
			
		||||
              0.4152
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                169,
 | 
			
		||||
                177,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              3.0,
 | 
			
		||||
              0.4152
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "on": {
 | 
			
		||||
          "type": "plane",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "artifactId": "[uuid]",
 | 
			
		||||
          "value": "XY",
 | 
			
		||||
          "origin": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "xAxis": {
 | 
			
		||||
            "x": 1.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "yAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 1.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "zAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 1.0
 | 
			
		||||
          },
 | 
			
		||||
          "units": {
 | 
			
		||||
            "type": "Mm"
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "part001": {
 | 
			
		||||
          "type": "Solid",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
        "start": {
 | 
			
		||||
          "from": [
 | 
			
		||||
            0.0,
 | 
			
		||||
            0.0
 | 
			
		||||
          ],
 | 
			
		||||
          "to": [
 | 
			
		||||
            0.0,
 | 
			
		||||
            0.0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "__geoMeta": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": [
 | 
			
		||||
              {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              60,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "tags": {
 | 
			
		||||
          "seg01": {
 | 
			
		||||
            "type": "TagIdentifier",
 | 
			
		||||
            "value": "seg01",
 | 
			
		||||
            "info": {
 | 
			
		||||
              "type": "TagEngineInfo",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sketch": "[uuid]",
 | 
			
		||||
              "path": {
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    66,
 | 
			
		||||
                    101,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "from": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": {
 | 
			
		||||
                  "end": 100,
 | 
			
		||||
                  "start": 94,
 | 
			
		||||
                  "type": "TagDeclarator",
 | 
			
		||||
                  "value": "seg01"
 | 
			
		||||
                },
 | 
			
		||||
                "to": [
 | 
			
		||||
                  1.0,
 | 
			
		||||
                  3.82
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "ToPoint"
 | 
			
		||||
              },
 | 
			
		||||
              "surface": {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
@ -48,310 +236,109 @@ description: Program memory after executing big_number_angle_to_match_length_x.k
 | 
			
		||||
                  "value": "seg01"
 | 
			
		||||
                },
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  107,
 | 
			
		||||
                  163,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  169,
 | 
			
		||||
                  177,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "sketch": {
 | 
			
		||||
              "type": "Sketch",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "paths": [
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      66,
 | 
			
		||||
                      101,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": {
 | 
			
		||||
                    "end": 100,
 | 
			
		||||
                    "start": 94,
 | 
			
		||||
                    "type": "TagDeclarator",
 | 
			
		||||
                    "value": "seg01"
 | 
			
		||||
                  },
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    1.0,
 | 
			
		||||
                    3.82
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      107,
 | 
			
		||||
                      163,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    1.0,
 | 
			
		||||
                    3.82
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    3.0,
 | 
			
		||||
                    0.4152
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      169,
 | 
			
		||||
                      177,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    3.0,
 | 
			
		||||
                    0.4152
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "on": {
 | 
			
		||||
                "type": "plane",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "artifactId": "[uuid]",
 | 
			
		||||
                "value": "XY",
 | 
			
		||||
                "origin": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "xAxis": {
 | 
			
		||||
                  "x": 1.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "yAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 1.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "zAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 1.0
 | 
			
		||||
                },
 | 
			
		||||
                "units": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "__meta": []
 | 
			
		||||
              },
 | 
			
		||||
              "start": {
 | 
			
		||||
                "from": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "to": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    60,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "tags": {
 | 
			
		||||
                "seg01": {
 | 
			
		||||
                  "type": "TagIdentifier",
 | 
			
		||||
                  "value": "seg01",
 | 
			
		||||
                  "info": {
 | 
			
		||||
                    "type": "TagEngineInfo",
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sketch": "[uuid]",
 | 
			
		||||
                    "path": {
 | 
			
		||||
                      "__geoMeta": {
 | 
			
		||||
                        "id": "[uuid]",
 | 
			
		||||
                        "sourceRange": [
 | 
			
		||||
                          66,
 | 
			
		||||
                          101,
 | 
			
		||||
                          0
 | 
			
		||||
                        ]
 | 
			
		||||
                      },
 | 
			
		||||
                      "from": [
 | 
			
		||||
                        0.0,
 | 
			
		||||
                        0.0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 100,
 | 
			
		||||
                        "start": 94,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "seg01"
 | 
			
		||||
                      },
 | 
			
		||||
                      "to": [
 | 
			
		||||
                        1.0,
 | 
			
		||||
                        3.82
 | 
			
		||||
                      ],
 | 
			
		||||
                      "type": "ToPoint"
 | 
			
		||||
                    },
 | 
			
		||||
                    "surface": {
 | 
			
		||||
                      "faceId": "[uuid]",
 | 
			
		||||
                      "id": "[uuid]",
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        66,
 | 
			
		||||
                        101,
 | 
			
		||||
                        0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 100,
 | 
			
		||||
                        "start": 94,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "seg01"
 | 
			
		||||
                      },
 | 
			
		||||
                      "type": "extrudePlane"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "__meta": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        94,
 | 
			
		||||
                        100,
 | 
			
		||||
                        0
 | 
			
		||||
                      ]
 | 
			
		||||
                    }
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "originalId": "[uuid]",
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    60,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "height": 10.0,
 | 
			
		||||
            "startCapId": "[uuid]",
 | 
			
		||||
            "endCapId": "[uuid]",
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  35,
 | 
			
		||||
                  60,
 | 
			
		||||
                  94,
 | 
			
		||||
                  100,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "seg01": {
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "value": "seg01",
 | 
			
		||||
          "info": {
 | 
			
		||||
            "type": "TagEngineInfo",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "sketch": "[uuid]",
 | 
			
		||||
            "path": {
 | 
			
		||||
              "__geoMeta": {
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  66,
 | 
			
		||||
                  101,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              },
 | 
			
		||||
              "from": [
 | 
			
		||||
                0.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 100,
 | 
			
		||||
                "start": 94,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "seg01"
 | 
			
		||||
              },
 | 
			
		||||
              "to": [
 | 
			
		||||
                1.0,
 | 
			
		||||
                3.82
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "ToPoint"
 | 
			
		||||
            },
 | 
			
		||||
            "surface": {
 | 
			
		||||
              "faceId": "[uuid]",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                66,
 | 
			
		||||
                101,
 | 
			
		||||
                0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 100,
 | 
			
		||||
                "start": 94,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "seg01"
 | 
			
		||||
              },
 | 
			
		||||
              "type": "extrudePlane"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                94,
 | 
			
		||||
                100,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
        "artifactId": "[uuid]",
 | 
			
		||||
        "originalId": "[uuid]",
 | 
			
		||||
        "units": {
 | 
			
		||||
          "type": "Mm"
 | 
			
		||||
        },
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              60,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "height": 10.0,
 | 
			
		||||
      "startCapId": "[uuid]",
 | 
			
		||||
      "endCapId": "[uuid]",
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": [
 | 
			
		||||
        {
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            35,
 | 
			
		||||
            60,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  },
 | 
			
		||||
  "seg01": {
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "value": "seg01",
 | 
			
		||||
    "info": {
 | 
			
		||||
      "type": "TagEngineInfo",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "sketch": "[uuid]",
 | 
			
		||||
      "path": {
 | 
			
		||||
        "__geoMeta": {
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            66,
 | 
			
		||||
            101,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "from": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          0.0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 100,
 | 
			
		||||
          "start": 94,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "seg01"
 | 
			
		||||
        },
 | 
			
		||||
        "to": [
 | 
			
		||||
          1.0,
 | 
			
		||||
          3.82
 | 
			
		||||
        ],
 | 
			
		||||
        "type": "ToPoint"
 | 
			
		||||
      },
 | 
			
		||||
      "surface": {
 | 
			
		||||
        "faceId": "[uuid]",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          66,
 | 
			
		||||
          101,
 | 
			
		||||
          0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 100,
 | 
			
		||||
          "start": 94,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "seg01"
 | 
			
		||||
        },
 | 
			
		||||
        "type": "extrudePlane"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          94,
 | 
			
		||||
          100,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,39 +1,227 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing big_number_angle_to_match_length_y.kcl
 | 
			
		||||
description: Variables in memory after executing big_number_angle_to_match_length_y.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "part001": {
 | 
			
		||||
    "type": "Solid",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "type": "Solid",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "value": [
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            66,
 | 
			
		||||
            101,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": {
 | 
			
		||||
            "end": 100,
 | 
			
		||||
            "start": 94,
 | 
			
		||||
            "type": "TagDeclarator",
 | 
			
		||||
            "value": "seg01"
 | 
			
		||||
          },
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            107,
 | 
			
		||||
            163,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            169,
 | 
			
		||||
            177,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudePlane"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "sketch": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "paths": [
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                66,
 | 
			
		||||
                101,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": {
 | 
			
		||||
              "end": 100,
 | 
			
		||||
              "start": 94,
 | 
			
		||||
              "type": "TagDeclarator",
 | 
			
		||||
              "value": "seg01"
 | 
			
		||||
            },
 | 
			
		||||
            "to": [
 | 
			
		||||
              1.0,
 | 
			
		||||
              3.82
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                107,
 | 
			
		||||
                163,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              1.0,
 | 
			
		||||
              3.82
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              3.0,
 | 
			
		||||
              3.3954
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                169,
 | 
			
		||||
                177,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "from": [
 | 
			
		||||
              3.0,
 | 
			
		||||
              3.3954
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              0.0,
 | 
			
		||||
              0.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "ToPoint"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "on": {
 | 
			
		||||
          "type": "plane",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "artifactId": "[uuid]",
 | 
			
		||||
          "value": "XY",
 | 
			
		||||
          "origin": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "xAxis": {
 | 
			
		||||
            "x": 1.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "yAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 1.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "zAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 1.0
 | 
			
		||||
          },
 | 
			
		||||
          "units": {
 | 
			
		||||
            "type": "Mm"
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "part001": {
 | 
			
		||||
          "type": "Solid",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
        "start": {
 | 
			
		||||
          "from": [
 | 
			
		||||
            0.0,
 | 
			
		||||
            0.0
 | 
			
		||||
          ],
 | 
			
		||||
          "to": [
 | 
			
		||||
            0.0,
 | 
			
		||||
            0.0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "__geoMeta": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": [
 | 
			
		||||
              {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              60,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "tags": {
 | 
			
		||||
          "seg01": {
 | 
			
		||||
            "type": "TagIdentifier",
 | 
			
		||||
            "value": "seg01",
 | 
			
		||||
            "info": {
 | 
			
		||||
              "type": "TagEngineInfo",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sketch": "[uuid]",
 | 
			
		||||
              "path": {
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    66,
 | 
			
		||||
                    101,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "from": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": {
 | 
			
		||||
                  "end": 100,
 | 
			
		||||
                  "start": 94,
 | 
			
		||||
                  "type": "TagDeclarator",
 | 
			
		||||
                  "value": "seg01"
 | 
			
		||||
                },
 | 
			
		||||
                "to": [
 | 
			
		||||
                  1.0,
 | 
			
		||||
                  3.82
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "ToPoint"
 | 
			
		||||
              },
 | 
			
		||||
              "surface": {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
@ -48,310 +236,109 @@ description: Program memory after executing big_number_angle_to_match_length_y.k
 | 
			
		||||
                  "value": "seg01"
 | 
			
		||||
                },
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  107,
 | 
			
		||||
                  163,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  169,
 | 
			
		||||
                  177,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "sketch": {
 | 
			
		||||
              "type": "Sketch",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "paths": [
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      66,
 | 
			
		||||
                      101,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": {
 | 
			
		||||
                    "end": 100,
 | 
			
		||||
                    "start": 94,
 | 
			
		||||
                    "type": "TagDeclarator",
 | 
			
		||||
                    "value": "seg01"
 | 
			
		||||
                  },
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    1.0,
 | 
			
		||||
                    3.82
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      107,
 | 
			
		||||
                      163,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    1.0,
 | 
			
		||||
                    3.82
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    3.0,
 | 
			
		||||
                    3.3954
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      169,
 | 
			
		||||
                      177,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    3.0,
 | 
			
		||||
                    3.3954
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    0.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "on": {
 | 
			
		||||
                "type": "plane",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "artifactId": "[uuid]",
 | 
			
		||||
                "value": "XY",
 | 
			
		||||
                "origin": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "xAxis": {
 | 
			
		||||
                  "x": 1.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "yAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 1.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "zAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 1.0
 | 
			
		||||
                },
 | 
			
		||||
                "units": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "__meta": []
 | 
			
		||||
              },
 | 
			
		||||
              "start": {
 | 
			
		||||
                "from": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "to": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    60,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "tags": {
 | 
			
		||||
                "seg01": {
 | 
			
		||||
                  "type": "TagIdentifier",
 | 
			
		||||
                  "value": "seg01",
 | 
			
		||||
                  "info": {
 | 
			
		||||
                    "type": "TagEngineInfo",
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sketch": "[uuid]",
 | 
			
		||||
                    "path": {
 | 
			
		||||
                      "__geoMeta": {
 | 
			
		||||
                        "id": "[uuid]",
 | 
			
		||||
                        "sourceRange": [
 | 
			
		||||
                          66,
 | 
			
		||||
                          101,
 | 
			
		||||
                          0
 | 
			
		||||
                        ]
 | 
			
		||||
                      },
 | 
			
		||||
                      "from": [
 | 
			
		||||
                        0.0,
 | 
			
		||||
                        0.0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 100,
 | 
			
		||||
                        "start": 94,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "seg01"
 | 
			
		||||
                      },
 | 
			
		||||
                      "to": [
 | 
			
		||||
                        1.0,
 | 
			
		||||
                        3.82
 | 
			
		||||
                      ],
 | 
			
		||||
                      "type": "ToPoint"
 | 
			
		||||
                    },
 | 
			
		||||
                    "surface": {
 | 
			
		||||
                      "faceId": "[uuid]",
 | 
			
		||||
                      "id": "[uuid]",
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        66,
 | 
			
		||||
                        101,
 | 
			
		||||
                        0
 | 
			
		||||
                      ],
 | 
			
		||||
                      "tag": {
 | 
			
		||||
                        "end": 100,
 | 
			
		||||
                        "start": 94,
 | 
			
		||||
                        "type": "TagDeclarator",
 | 
			
		||||
                        "value": "seg01"
 | 
			
		||||
                      },
 | 
			
		||||
                      "type": "extrudePlane"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "__meta": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        94,
 | 
			
		||||
                        100,
 | 
			
		||||
                        0
 | 
			
		||||
                      ]
 | 
			
		||||
                    }
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "originalId": "[uuid]",
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    60,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "height": 10.0,
 | 
			
		||||
            "startCapId": "[uuid]",
 | 
			
		||||
            "endCapId": "[uuid]",
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  35,
 | 
			
		||||
                  60,
 | 
			
		||||
                  94,
 | 
			
		||||
                  100,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "seg01": {
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "value": "seg01",
 | 
			
		||||
          "info": {
 | 
			
		||||
            "type": "TagEngineInfo",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "sketch": "[uuid]",
 | 
			
		||||
            "path": {
 | 
			
		||||
              "__geoMeta": {
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  66,
 | 
			
		||||
                  101,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              },
 | 
			
		||||
              "from": [
 | 
			
		||||
                0.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 100,
 | 
			
		||||
                "start": 94,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "seg01"
 | 
			
		||||
              },
 | 
			
		||||
              "to": [
 | 
			
		||||
                1.0,
 | 
			
		||||
                3.82
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "ToPoint"
 | 
			
		||||
            },
 | 
			
		||||
            "surface": {
 | 
			
		||||
              "faceId": "[uuid]",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                66,
 | 
			
		||||
                101,
 | 
			
		||||
                0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": {
 | 
			
		||||
                "end": 100,
 | 
			
		||||
                "start": 94,
 | 
			
		||||
                "type": "TagDeclarator",
 | 
			
		||||
                "value": "seg01"
 | 
			
		||||
              },
 | 
			
		||||
              "type": "extrudePlane"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                94,
 | 
			
		||||
                100,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
        "artifactId": "[uuid]",
 | 
			
		||||
        "originalId": "[uuid]",
 | 
			
		||||
        "units": {
 | 
			
		||||
          "type": "Mm"
 | 
			
		||||
        },
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              60,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "height": 10.0,
 | 
			
		||||
      "startCapId": "[uuid]",
 | 
			
		||||
      "endCapId": "[uuid]",
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": [
 | 
			
		||||
        {
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            35,
 | 
			
		||||
            60,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  },
 | 
			
		||||
  "seg01": {
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "value": "seg01",
 | 
			
		||||
    "info": {
 | 
			
		||||
      "type": "TagEngineInfo",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "sketch": "[uuid]",
 | 
			
		||||
      "path": {
 | 
			
		||||
        "__geoMeta": {
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            66,
 | 
			
		||||
            101,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "from": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          0.0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 100,
 | 
			
		||||
          "start": 94,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "seg01"
 | 
			
		||||
        },
 | 
			
		||||
        "to": [
 | 
			
		||||
          1.0,
 | 
			
		||||
          3.82
 | 
			
		||||
        ],
 | 
			
		||||
        "type": "ToPoint"
 | 
			
		||||
      },
 | 
			
		||||
      "surface": {
 | 
			
		||||
        "faceId": "[uuid]",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          66,
 | 
			
		||||
          101,
 | 
			
		||||
          0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 100,
 | 
			
		||||
          "start": 94,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "seg01"
 | 
			
		||||
        },
 | 
			
		||||
        "type": "extrudePlane"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          94,
 | 
			
		||||
          100,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,171 +1,158 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing boolean_logical_and.kcl
 | 
			
		||||
description: Variables in memory after executing boolean_logical_and.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "a": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 2.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                45,
 | 
			
		||||
                46,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "aa": {
 | 
			
		||||
          "type": "Bool",
 | 
			
		||||
          "value": false,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                5,
 | 
			
		||||
                9,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                12,
 | 
			
		||||
                17,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "b": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 2.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                175,
 | 
			
		||||
                176,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "bb": {
 | 
			
		||||
          "type": "Bool",
 | 
			
		||||
          "value": false,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                135,
 | 
			
		||||
                140,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                143,
 | 
			
		||||
                147,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "c": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 1.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                290,
 | 
			
		||||
                291,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "cc": {
 | 
			
		||||
          "type": "Bool",
 | 
			
		||||
          "value": true,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                264,
 | 
			
		||||
                268,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                271,
 | 
			
		||||
                275,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "d": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 2.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                434,
 | 
			
		||||
                435,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "dd": {
 | 
			
		||||
          "type": "Bool",
 | 
			
		||||
          "value": false,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                393,
 | 
			
		||||
                398,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                401,
 | 
			
		||||
                406,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "a": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 2.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          45,
 | 
			
		||||
          46,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "aa": {
 | 
			
		||||
    "type": "Bool",
 | 
			
		||||
    "value": false,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          5,
 | 
			
		||||
          9,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          12,
 | 
			
		||||
          17,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "b": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 2.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          175,
 | 
			
		||||
          176,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "bb": {
 | 
			
		||||
    "type": "Bool",
 | 
			
		||||
    "value": false,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          135,
 | 
			
		||||
          140,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          143,
 | 
			
		||||
          147,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "c": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 1.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          290,
 | 
			
		||||
          291,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "cc": {
 | 
			
		||||
    "type": "Bool",
 | 
			
		||||
    "value": true,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          264,
 | 
			
		||||
          268,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          271,
 | 
			
		||||
          275,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "d": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 2.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          434,
 | 
			
		||||
          435,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "dd": {
 | 
			
		||||
    "type": "Bool",
 | 
			
		||||
    "value": false,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          393,
 | 
			
		||||
          398,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          401,
 | 
			
		||||
          406,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,133 +1,120 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing boolean_logical_multiple.kcl
 | 
			
		||||
description: Variables in memory after executing boolean_logical_multiple.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "i": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 1.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                40,
 | 
			
		||||
                41,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "ii": {
 | 
			
		||||
          "type": "Bool",
 | 
			
		||||
          "value": true,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                5,
 | 
			
		||||
                9,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                12,
 | 
			
		||||
                17,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                20,
 | 
			
		||||
                25,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "j": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 1.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                166,
 | 
			
		||||
                167,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "jj": {
 | 
			
		||||
          "type": "Bool",
 | 
			
		||||
          "value": true,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                115,
 | 
			
		||||
                120,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                123,
 | 
			
		||||
                127,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                130,
 | 
			
		||||
                136,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                139,
 | 
			
		||||
                144,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                147,
 | 
			
		||||
                151,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "i": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 1.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          40,
 | 
			
		||||
          41,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "ii": {
 | 
			
		||||
    "type": "Bool",
 | 
			
		||||
    "value": true,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          5,
 | 
			
		||||
          9,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          12,
 | 
			
		||||
          17,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          20,
 | 
			
		||||
          25,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "j": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 1.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          166,
 | 
			
		||||
          167,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "jj": {
 | 
			
		||||
    "type": "Bool",
 | 
			
		||||
    "value": true,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          115,
 | 
			
		||||
          120,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          123,
 | 
			
		||||
          127,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          130,
 | 
			
		||||
          136,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          139,
 | 
			
		||||
          144,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          147,
 | 
			
		||||
          151,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,171 +1,158 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing boolean_logical_or.kcl
 | 
			
		||||
description: Variables in memory after executing boolean_logical_or.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "a": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 1.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                32,
 | 
			
		||||
                33,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "aa": {
 | 
			
		||||
          "type": "Bool",
 | 
			
		||||
          "value": true,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                5,
 | 
			
		||||
                9,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                12,
 | 
			
		||||
                17,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "b": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 1.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                158,
 | 
			
		||||
                159,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "bb": {
 | 
			
		||||
          "type": "Bool",
 | 
			
		||||
          "value": true,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                131,
 | 
			
		||||
                136,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                139,
 | 
			
		||||
                143,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "c": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 1.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                284,
 | 
			
		||||
                285,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "cc": {
 | 
			
		||||
          "type": "Bool",
 | 
			
		||||
          "value": true,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                258,
 | 
			
		||||
                262,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                265,
 | 
			
		||||
                269,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "d": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 2.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                427,
 | 
			
		||||
                428,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "dd": {
 | 
			
		||||
          "type": "Bool",
 | 
			
		||||
          "value": false,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                386,
 | 
			
		||||
                391,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                394,
 | 
			
		||||
                399,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "a": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 1.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          32,
 | 
			
		||||
          33,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "aa": {
 | 
			
		||||
    "type": "Bool",
 | 
			
		||||
    "value": true,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          5,
 | 
			
		||||
          9,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          12,
 | 
			
		||||
          17,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "b": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 1.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          158,
 | 
			
		||||
          159,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "bb": {
 | 
			
		||||
    "type": "Bool",
 | 
			
		||||
    "value": true,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          131,
 | 
			
		||||
          136,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          139,
 | 
			
		||||
          143,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "c": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 1.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          284,
 | 
			
		||||
          285,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "cc": {
 | 
			
		||||
    "type": "Bool",
 | 
			
		||||
    "value": true,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          258,
 | 
			
		||||
          262,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          265,
 | 
			
		||||
          269,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "d": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 2.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          427,
 | 
			
		||||
          428,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "dd": {
 | 
			
		||||
    "type": "Bool",
 | 
			
		||||
    "value": false,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          386,
 | 
			
		||||
          391,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          394,
 | 
			
		||||
          399,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,176 +1,163 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing circle_three_point.kcl
 | 
			
		||||
description: Variables in memory after executing circle_three_point.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "sketch001": {
 | 
			
		||||
          "type": "Solid",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": [
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  37,
 | 
			
		||||
                  98,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudeArc"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "sketch": {
 | 
			
		||||
              "type": "Sketch",
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "sketch001": {
 | 
			
		||||
    "type": "Solid",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "type": "Solid",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "value": [
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            37,
 | 
			
		||||
            98,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudeArc"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "sketch": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "paths": [
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "paths": [
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      37,
 | 
			
		||||
                      98,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    30.0059,
 | 
			
		||||
                    19.75
 | 
			
		||||
                  ],
 | 
			
		||||
                  "p1": [
 | 
			
		||||
                    25.0,
 | 
			
		||||
                    25.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "p2": [
 | 
			
		||||
                    30.0,
 | 
			
		||||
                    20.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "p3": [
 | 
			
		||||
                    27.0,
 | 
			
		||||
                    15.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    30.0059,
 | 
			
		||||
                    19.75
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "CircleThreePoint"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "on": {
 | 
			
		||||
                "type": "plane",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "artifactId": "[uuid]",
 | 
			
		||||
                "value": "XY",
 | 
			
		||||
                "origin": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "xAxis": {
 | 
			
		||||
                  "x": 1.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "yAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 1.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "zAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 1.0
 | 
			
		||||
                },
 | 
			
		||||
                "units": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "__meta": []
 | 
			
		||||
              },
 | 
			
		||||
              "start": {
 | 
			
		||||
                "from": [
 | 
			
		||||
                  30.00594901040716,
 | 
			
		||||
                  19.749999999999996
 | 
			
		||||
                ],
 | 
			
		||||
                "to": [
 | 
			
		||||
                  30.00594901040716,
 | 
			
		||||
                  19.749999999999996
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    37,
 | 
			
		||||
                    98,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "originalId": "[uuid]",
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    37,
 | 
			
		||||
                    98,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                37,
 | 
			
		||||
                98,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "height": 10.0,
 | 
			
		||||
            "startCapId": "[uuid]",
 | 
			
		||||
            "endCapId": "[uuid]",
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  37,
 | 
			
		||||
                  98,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            "from": [
 | 
			
		||||
              30.0059,
 | 
			
		||||
              19.75
 | 
			
		||||
            ],
 | 
			
		||||
            "p1": [
 | 
			
		||||
              25.0,
 | 
			
		||||
              25.0
 | 
			
		||||
            ],
 | 
			
		||||
            "p2": [
 | 
			
		||||
              30.0,
 | 
			
		||||
              20.0
 | 
			
		||||
            ],
 | 
			
		||||
            "p3": [
 | 
			
		||||
              27.0,
 | 
			
		||||
              15.0
 | 
			
		||||
            ],
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              30.0059,
 | 
			
		||||
              19.75
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "CircleThreePoint"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "on": {
 | 
			
		||||
          "type": "plane",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "artifactId": "[uuid]",
 | 
			
		||||
          "value": "XY",
 | 
			
		||||
          "origin": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "xAxis": {
 | 
			
		||||
            "x": 1.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "yAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 1.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "zAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 1.0
 | 
			
		||||
          },
 | 
			
		||||
          "units": {
 | 
			
		||||
            "type": "Mm"
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "start": {
 | 
			
		||||
          "from": [
 | 
			
		||||
            30.00594901040716,
 | 
			
		||||
            19.749999999999996
 | 
			
		||||
          ],
 | 
			
		||||
          "to": [
 | 
			
		||||
            30.00594901040716,
 | 
			
		||||
            19.749999999999996
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "__geoMeta": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              37,
 | 
			
		||||
              98,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        },
 | 
			
		||||
        "artifactId": "[uuid]",
 | 
			
		||||
        "originalId": "[uuid]",
 | 
			
		||||
        "units": {
 | 
			
		||||
          "type": "Mm"
 | 
			
		||||
        },
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              37,
 | 
			
		||||
              98,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
      "height": 10.0,
 | 
			
		||||
      "startCapId": "[uuid]",
 | 
			
		||||
      "endCapId": "[uuid]",
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": [
 | 
			
		||||
        {
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            37,
 | 
			
		||||
            98,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,39 +1,26 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing comparisons.kcl
 | 
			
		||||
description: Variables in memory after executing comparisons.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,197 +1,184 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing computed_var.kcl
 | 
			
		||||
description: Variables in memory after executing computed_var.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "arr": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 0.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    44,
 | 
			
		||||
                    45,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 0.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    47,
 | 
			
		||||
                    48,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 0.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    50,
 | 
			
		||||
                    51,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 10.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    53,
 | 
			
		||||
                    55,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                43,
 | 
			
		||||
                56,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "i": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 3.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                61,
 | 
			
		||||
                62,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "obj": {
 | 
			
		||||
          "type": "Object",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "bar": {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 0.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    150,
 | 
			
		||||
                    151,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "foo": {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 1.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    141,
 | 
			
		||||
                    142,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                133,
 | 
			
		||||
                153,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "one": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 1.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                141,
 | 
			
		||||
                142,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "p": {
 | 
			
		||||
          "type": "String",
 | 
			
		||||
          "value": "foo",
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                121,
 | 
			
		||||
                126,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "ten": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 10.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                53,
 | 
			
		||||
                55,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "arr": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 0.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              44,
 | 
			
		||||
              45,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 0.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              47,
 | 
			
		||||
              48,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 0.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              50,
 | 
			
		||||
              51,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 10.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              53,
 | 
			
		||||
              55,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          43,
 | 
			
		||||
          56,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "i": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 3.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          61,
 | 
			
		||||
          62,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "obj": {
 | 
			
		||||
    "type": "Object",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "bar": {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 0.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              150,
 | 
			
		||||
              151,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "foo": {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 1.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              141,
 | 
			
		||||
              142,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          133,
 | 
			
		||||
          153,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "one": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 1.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          141,
 | 
			
		||||
          142,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "p": {
 | 
			
		||||
    "type": "String",
 | 
			
		||||
    "value": "foo",
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          121,
 | 
			
		||||
          126,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "ten": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 10.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          53,
 | 
			
		||||
          55,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,277 +1,243 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing double_map_fn.kcl
 | 
			
		||||
description: Variables in memory after executing double_map_fn.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "increment": {
 | 
			
		||||
          "type": "Function",
 | 
			
		||||
          "expression": {
 | 
			
		||||
            "body": {
 | 
			
		||||
              "body": [
 | 
			
		||||
                {
 | 
			
		||||
                  "argument": {
 | 
			
		||||
                    "end": 32,
 | 
			
		||||
                    "left": {
 | 
			
		||||
                      "end": 28,
 | 
			
		||||
                      "name": "i",
 | 
			
		||||
                      "start": 27,
 | 
			
		||||
                      "type": "Identifier",
 | 
			
		||||
                      "type": "Identifier"
 | 
			
		||||
                    },
 | 
			
		||||
                    "operator": "+",
 | 
			
		||||
                    "right": {
 | 
			
		||||
                      "end": 32,
 | 
			
		||||
                      "raw": "1",
 | 
			
		||||
                      "start": 31,
 | 
			
		||||
                      "type": "Literal",
 | 
			
		||||
                      "type": "Literal",
 | 
			
		||||
                      "value": {
 | 
			
		||||
                        "value": 1.0,
 | 
			
		||||
                        "suffix": "None"
 | 
			
		||||
                      }
 | 
			
		||||
                    },
 | 
			
		||||
                    "start": 27,
 | 
			
		||||
                    "type": "BinaryExpression",
 | 
			
		||||
                    "type": "BinaryExpression"
 | 
			
		||||
                  },
 | 
			
		||||
                  "end": 32,
 | 
			
		||||
                  "start": 20,
 | 
			
		||||
                  "type": "ReturnStatement",
 | 
			
		||||
                  "type": "ReturnStatement"
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "increment": {
 | 
			
		||||
    "type": "Function",
 | 
			
		||||
    "expression": {
 | 
			
		||||
      "body": {
 | 
			
		||||
        "body": [
 | 
			
		||||
          {
 | 
			
		||||
            "argument": {
 | 
			
		||||
              "end": 32,
 | 
			
		||||
              "left": {
 | 
			
		||||
                "end": 28,
 | 
			
		||||
                "name": "i",
 | 
			
		||||
                "start": 27,
 | 
			
		||||
                "type": "Identifier",
 | 
			
		||||
                "type": "Identifier"
 | 
			
		||||
              },
 | 
			
		||||
              "operator": "+",
 | 
			
		||||
              "right": {
 | 
			
		||||
                "end": 32,
 | 
			
		||||
                "raw": "1",
 | 
			
		||||
                "start": 31,
 | 
			
		||||
                "type": "Literal",
 | 
			
		||||
                "type": "Literal",
 | 
			
		||||
                "value": {
 | 
			
		||||
                  "value": 1.0,
 | 
			
		||||
                  "suffix": "None"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "end": 34,
 | 
			
		||||
              "start": 16
 | 
			
		||||
              },
 | 
			
		||||
              "start": 27,
 | 
			
		||||
              "type": "BinaryExpression",
 | 
			
		||||
              "type": "BinaryExpression"
 | 
			
		||||
            },
 | 
			
		||||
            "end": 34,
 | 
			
		||||
            "params": [
 | 
			
		||||
              {
 | 
			
		||||
                "type": "Parameter",
 | 
			
		||||
                "identifier": {
 | 
			
		||||
                  "end": 14,
 | 
			
		||||
                  "name": "i",
 | 
			
		||||
                  "start": 13,
 | 
			
		||||
                  "type": "Identifier"
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "start": 12,
 | 
			
		||||
            "type": "FunctionExpression"
 | 
			
		||||
          },
 | 
			
		||||
          "memory": [
 | 
			
		||||
            0,
 | 
			
		||||
            1
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                12,
 | 
			
		||||
                34,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "xs": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    41,
 | 
			
		||||
                    47,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 1,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    41,
 | 
			
		||||
                    47,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Int",
 | 
			
		||||
              "value": 2,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    41,
 | 
			
		||||
                    47,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                41,
 | 
			
		||||
                47,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "ys": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 2.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    41,
 | 
			
		||||
                    47,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    31,
 | 
			
		||||
                    32,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    31,
 | 
			
		||||
                    32,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 3.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    41,
 | 
			
		||||
                    47,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    31,
 | 
			
		||||
                    32,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    31,
 | 
			
		||||
                    32,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 4.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    41,
 | 
			
		||||
                    47,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    31,
 | 
			
		||||
                    32,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    31,
 | 
			
		||||
                    32,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                84,
 | 
			
		||||
                101,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
            "end": 32,
 | 
			
		||||
            "start": 20,
 | 
			
		||||
            "type": "ReturnStatement",
 | 
			
		||||
            "type": "ReturnStatement"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "end": 34,
 | 
			
		||||
        "start": 16
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [
 | 
			
		||||
      "end": 34,
 | 
			
		||||
      "params": [
 | 
			
		||||
        {
 | 
			
		||||
          "parent_snapshot": null,
 | 
			
		||||
          "data": {
 | 
			
		||||
            "increment": {
 | 
			
		||||
              "type": "Tombstone",
 | 
			
		||||
              "value": null,
 | 
			
		||||
              "__meta": []
 | 
			
		||||
            },
 | 
			
		||||
            "xs": {
 | 
			
		||||
              "type": "Tombstone",
 | 
			
		||||
              "value": null,
 | 
			
		||||
              "__meta": []
 | 
			
		||||
            },
 | 
			
		||||
            "ys": {
 | 
			
		||||
              "type": "Tombstone",
 | 
			
		||||
              "value": null,
 | 
			
		||||
              "__meta": []
 | 
			
		||||
            }
 | 
			
		||||
          "type": "Parameter",
 | 
			
		||||
          "identifier": {
 | 
			
		||||
            "end": 14,
 | 
			
		||||
            "name": "i",
 | 
			
		||||
            "start": 13,
 | 
			
		||||
            "type": "Identifier"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
      "start": 12,
 | 
			
		||||
      "type": "FunctionExpression"
 | 
			
		||||
    },
 | 
			
		||||
    "memory": [
 | 
			
		||||
      0,
 | 
			
		||||
      1
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          12,
 | 
			
		||||
          34,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "xs": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              41,
 | 
			
		||||
              47,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 1,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              41,
 | 
			
		||||
              47,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Int",
 | 
			
		||||
        "value": 2,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              41,
 | 
			
		||||
              47,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          41,
 | 
			
		||||
          47,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "ys": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 2.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              41,
 | 
			
		||||
              47,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              31,
 | 
			
		||||
              32,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              31,
 | 
			
		||||
              32,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 3.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              41,
 | 
			
		||||
              47,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              31,
 | 
			
		||||
              32,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              31,
 | 
			
		||||
              32,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 4.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              41,
 | 
			
		||||
              47,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              31,
 | 
			
		||||
              32,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              31,
 | 
			
		||||
              32,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          84,
 | 
			
		||||
          101,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,171 +1,157 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing helix_ccw.kcl
 | 
			
		||||
snapshot_kind: text
 | 
			
		||||
description: Variables in memory after executing helix_ccw.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "part001": {
 | 
			
		||||
          "type": "Solid",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": [
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  35,
 | 
			
		||||
                  78,
 | 
			
		||||
                  0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudeArc"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "sketch": {
 | 
			
		||||
              "type": "Sketch",
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "part001": {
 | 
			
		||||
    "type": "Solid",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "type": "Solid",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "value": [
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            35,
 | 
			
		||||
            78,
 | 
			
		||||
            0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudeArc"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "sketch": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "paths": [
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "paths": [
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      35,
 | 
			
		||||
                      78,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "ccw": true,
 | 
			
		||||
                  "center": [
 | 
			
		||||
                    5.0,
 | 
			
		||||
                    5.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    15.0,
 | 
			
		||||
                    5.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "radius": 10.0,
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    15.0,
 | 
			
		||||
                    5.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "Circle"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "on": {
 | 
			
		||||
                "type": "plane",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "artifactId": "[uuid]",
 | 
			
		||||
                "value": "XY",
 | 
			
		||||
                "origin": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "xAxis": {
 | 
			
		||||
                  "x": 1.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "yAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 1.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "zAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 1.0
 | 
			
		||||
                },
 | 
			
		||||
                "units": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "__meta": []
 | 
			
		||||
              },
 | 
			
		||||
              "start": {
 | 
			
		||||
                "from": [
 | 
			
		||||
                  15.0,
 | 
			
		||||
                  5.0
 | 
			
		||||
                ],
 | 
			
		||||
                "to": [
 | 
			
		||||
                  15.0,
 | 
			
		||||
                  5.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    78,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "originalId": "[uuid]",
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    35,
 | 
			
		||||
                    78,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                35,
 | 
			
		||||
                78,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "height": 10.0,
 | 
			
		||||
            "startCapId": "[uuid]",
 | 
			
		||||
            "endCapId": "[uuid]",
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  35,
 | 
			
		||||
                  78,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            "ccw": true,
 | 
			
		||||
            "center": [
 | 
			
		||||
              5.0,
 | 
			
		||||
              5.0
 | 
			
		||||
            ],
 | 
			
		||||
            "from": [
 | 
			
		||||
              15.0,
 | 
			
		||||
              5.0
 | 
			
		||||
            ],
 | 
			
		||||
            "radius": 10.0,
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              15.0,
 | 
			
		||||
              5.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "Circle"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "on": {
 | 
			
		||||
          "type": "plane",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "artifactId": "[uuid]",
 | 
			
		||||
          "value": "XY",
 | 
			
		||||
          "origin": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "xAxis": {
 | 
			
		||||
            "x": 1.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "yAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 1.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "zAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 1.0
 | 
			
		||||
          },
 | 
			
		||||
          "units": {
 | 
			
		||||
            "type": "Mm"
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "start": {
 | 
			
		||||
          "from": [
 | 
			
		||||
            15.0,
 | 
			
		||||
            5.0
 | 
			
		||||
          ],
 | 
			
		||||
          "to": [
 | 
			
		||||
            15.0,
 | 
			
		||||
            5.0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "__geoMeta": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              78,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        },
 | 
			
		||||
        "artifactId": "[uuid]",
 | 
			
		||||
        "originalId": "[uuid]",
 | 
			
		||||
        "units": {
 | 
			
		||||
          "type": "Mm"
 | 
			
		||||
        },
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              35,
 | 
			
		||||
              78,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
      "height": 10.0,
 | 
			
		||||
      "startCapId": "[uuid]",
 | 
			
		||||
      "endCapId": "[uuid]",
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": [
 | 
			
		||||
        {
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            35,
 | 
			
		||||
            78,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,34 +1,178 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing helix_simple.kcl
 | 
			
		||||
snapshot_kind: text
 | 
			
		||||
description: Variables in memory after executing helix_simple.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "edge001": {
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "type": "TagIdentifier",
 | 
			
		||||
    "value": "edge001",
 | 
			
		||||
    "info": {
 | 
			
		||||
      "type": "TagEngineInfo",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "sketch": "[uuid]",
 | 
			
		||||
      "path": {
 | 
			
		||||
        "__geoMeta": {
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            102,
 | 
			
		||||
            137,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        "from": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          0.0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": {
 | 
			
		||||
          "end": 136,
 | 
			
		||||
          "start": 128,
 | 
			
		||||
          "type": "TagDeclarator",
 | 
			
		||||
          "value": "edge001"
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        "to": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          10.0
 | 
			
		||||
        ],
 | 
			
		||||
        "type": "ToPoint"
 | 
			
		||||
      },
 | 
			
		||||
      "surface": null
 | 
			
		||||
    },
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          128,
 | 
			
		||||
          136,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "helixPath": {
 | 
			
		||||
    "type": "Helix",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "value": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "revolutions": 5.0,
 | 
			
		||||
      "angleStart": 0.0,
 | 
			
		||||
      "ccw": true,
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": [
 | 
			
		||||
        {
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            151,
 | 
			
		||||
            257,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "helper001": {
 | 
			
		||||
    "type": "Sketch",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "type": "Sketch",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "paths": [
 | 
			
		||||
        {
 | 
			
		||||
          "__geoMeta": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              102,
 | 
			
		||||
              137,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          "from": [
 | 
			
		||||
            0.0,
 | 
			
		||||
            0.0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": {
 | 
			
		||||
            "end": 136,
 | 
			
		||||
            "start": 128,
 | 
			
		||||
            "type": "TagDeclarator",
 | 
			
		||||
            "value": "edge001"
 | 
			
		||||
          },
 | 
			
		||||
          "to": [
 | 
			
		||||
            0.0,
 | 
			
		||||
            10.0
 | 
			
		||||
          ],
 | 
			
		||||
          "type": "ToPoint"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "on": {
 | 
			
		||||
        "type": "plane",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "artifactId": "[uuid]",
 | 
			
		||||
        "value": "XZ",
 | 
			
		||||
        "origin": {
 | 
			
		||||
          "x": 0.0,
 | 
			
		||||
          "y": 0.0,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        "xAxis": {
 | 
			
		||||
          "x": 1.0,
 | 
			
		||||
          "y": 0.0,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "yAxis": {
 | 
			
		||||
          "x": 0.0,
 | 
			
		||||
          "y": 0.0,
 | 
			
		||||
          "z": 1.0
 | 
			
		||||
        },
 | 
			
		||||
        "zAxis": {
 | 
			
		||||
          "x": 0.0,
 | 
			
		||||
          "y": -1.0,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "units": {
 | 
			
		||||
          "type": "Mm"
 | 
			
		||||
        },
 | 
			
		||||
        "__meta": []
 | 
			
		||||
      },
 | 
			
		||||
      "start": {
 | 
			
		||||
        "from": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          0.0
 | 
			
		||||
        ],
 | 
			
		||||
        "to": [
 | 
			
		||||
          0.0,
 | 
			
		||||
          0.0
 | 
			
		||||
        ],
 | 
			
		||||
        "tag": null,
 | 
			
		||||
        "__geoMeta": {
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            71,
 | 
			
		||||
            96,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "tags": {
 | 
			
		||||
        "edge001": {
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "type": "TagIdentifier",
 | 
			
		||||
          "value": "edge001",
 | 
			
		||||
          "info": {
 | 
			
		||||
@ -71,180 +215,22 @@ snapshot_kind: text
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "helixPath": {
 | 
			
		||||
          "type": "Helix",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "value": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "revolutions": 5.0,
 | 
			
		||||
            "angleStart": 0.0,
 | 
			
		||||
            "ccw": true,
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  151,
 | 
			
		||||
                  257,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "helper001": {
 | 
			
		||||
          "type": "Sketch",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Sketch",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "paths": [
 | 
			
		||||
              {
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    102,
 | 
			
		||||
                    137,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "from": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": {
 | 
			
		||||
                  "end": 136,
 | 
			
		||||
                  "start": 128,
 | 
			
		||||
                  "type": "TagDeclarator",
 | 
			
		||||
                  "value": "edge001"
 | 
			
		||||
                },
 | 
			
		||||
                "to": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  10.0
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "ToPoint"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "on": {
 | 
			
		||||
              "type": "plane",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "value": "XZ",
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "xAxis": {
 | 
			
		||||
                "x": 1.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "yAxis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "zAxis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": -1.0,
 | 
			
		||||
                "z": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": []
 | 
			
		||||
            },
 | 
			
		||||
            "start": {
 | 
			
		||||
              "from": [
 | 
			
		||||
                0.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "to": [
 | 
			
		||||
                0.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": null,
 | 
			
		||||
              "__geoMeta": {
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  71,
 | 
			
		||||
                  96,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "tags": {
 | 
			
		||||
              "edge001": {
 | 
			
		||||
                "type": "TagIdentifier",
 | 
			
		||||
                "value": "edge001",
 | 
			
		||||
                "info": {
 | 
			
		||||
                  "type": "TagEngineInfo",
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sketch": "[uuid]",
 | 
			
		||||
                  "path": {
 | 
			
		||||
                    "__geoMeta": {
 | 
			
		||||
                      "id": "[uuid]",
 | 
			
		||||
                      "sourceRange": [
 | 
			
		||||
                        102,
 | 
			
		||||
                        137,
 | 
			
		||||
                        0
 | 
			
		||||
                      ]
 | 
			
		||||
                    },
 | 
			
		||||
                    "from": [
 | 
			
		||||
                      0.0,
 | 
			
		||||
                      0.0
 | 
			
		||||
                    ],
 | 
			
		||||
                    "tag": {
 | 
			
		||||
                      "end": 136,
 | 
			
		||||
                      "start": 128,
 | 
			
		||||
                      "type": "TagDeclarator",
 | 
			
		||||
                      "value": "edge001"
 | 
			
		||||
                    },
 | 
			
		||||
                    "to": [
 | 
			
		||||
                      0.0,
 | 
			
		||||
                      10.0
 | 
			
		||||
                    ],
 | 
			
		||||
                    "type": "ToPoint"
 | 
			
		||||
                  },
 | 
			
		||||
                  "surface": null
 | 
			
		||||
                },
 | 
			
		||||
                "__meta": [
 | 
			
		||||
                  {
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      128,
 | 
			
		||||
                      136,
 | 
			
		||||
                      0
 | 
			
		||||
                    ]
 | 
			
		||||
                  }
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "originalId": "[uuid]",
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  71,
 | 
			
		||||
                  96,
 | 
			
		||||
                  0
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "originalId": "[uuid]",
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Mm"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": [
 | 
			
		||||
        {
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            71,
 | 
			
		||||
            96,
 | 
			
		||||
            0
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,78 +1,65 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing if_else.kcl
 | 
			
		||||
description: Variables in memory after executing if_else.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "a": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 3.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                64,
 | 
			
		||||
                65,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "b": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 4.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                199,
 | 
			
		||||
                200,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "c": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 5.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                332,
 | 
			
		||||
                333,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "a": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 3.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          64,
 | 
			
		||||
          65,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "b": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 4.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          199,
 | 
			
		||||
          200,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "c": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 5.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          332,
 | 
			
		||||
          333,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,91 +1,39 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing import_constant.kcl
 | 
			
		||||
description: Variables in memory after executing import_constant.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "three": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 3.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                15,
 | 
			
		||||
                16,
 | 
			
		||||
                1
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "three": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 3.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                15,
 | 
			
		||||
                16,
 | 
			
		||||
                1
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "three": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 3.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          15,
 | 
			
		||||
          16,
 | 
			
		||||
          1
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,130 +1,39 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing import_export.kcl
 | 
			
		||||
description: Variables in memory after executing import_export.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "three": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 3.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                15,
 | 
			
		||||
                16,
 | 
			
		||||
                2
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "three": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 3.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                15,
 | 
			
		||||
                16,
 | 
			
		||||
                2
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "three": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 3.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                15,
 | 
			
		||||
                16,
 | 
			
		||||
                2
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "three": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 3.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          15,
 | 
			
		||||
          16,
 | 
			
		||||
          2
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,68 +1,55 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing import_foreign.kcl
 | 
			
		||||
description: Variables in memory after executing import_foreign.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "cube": {
 | 
			
		||||
          "type": "Module",
 | 
			
		||||
          "value": 1,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                0,
 | 
			
		||||
                36,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "model": {
 | 
			
		||||
          "type": "ImportedGeometry",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "value": [
 | 
			
		||||
            "cube.gltf"
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                0,
 | 
			
		||||
                36,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "cube": {
 | 
			
		||||
    "type": "Module",
 | 
			
		||||
    "value": 1,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          0,
 | 
			
		||||
          36,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "model": {
 | 
			
		||||
    "type": "ImportedGeometry",
 | 
			
		||||
    "id": "[uuid]",
 | 
			
		||||
    "value": [
 | 
			
		||||
      "cube.gltf"
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          0,
 | 
			
		||||
          36,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,592 +1,140 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing import_function_not_sketch.kcl
 | 
			
		||||
description: Variables in memory after executing import_function_not_sketch.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "one": {
 | 
			
		||||
          "type": "Function",
 | 
			
		||||
          "expression": {
 | 
			
		||||
            "body": {
 | 
			
		||||
              "body": [
 | 
			
		||||
                {
 | 
			
		||||
                  "argument": {
 | 
			
		||||
                    "end": 106,
 | 
			
		||||
                    "left": {
 | 
			
		||||
                      "arguments": [],
 | 
			
		||||
                      "callee": {
 | 
			
		||||
                        "end": 100,
 | 
			
		||||
                        "name": "two",
 | 
			
		||||
                        "start": 97,
 | 
			
		||||
                        "type": "Identifier"
 | 
			
		||||
                      },
 | 
			
		||||
                      "end": 102,
 | 
			
		||||
                      "start": 97,
 | 
			
		||||
                      "type": "CallExpression",
 | 
			
		||||
                      "type": "CallExpression"
 | 
			
		||||
                    },
 | 
			
		||||
                    "operator": "-",
 | 
			
		||||
                    "right": {
 | 
			
		||||
                      "end": 106,
 | 
			
		||||
                      "raw": "1",
 | 
			
		||||
                      "start": 105,
 | 
			
		||||
                      "type": "Literal",
 | 
			
		||||
                      "type": "Literal",
 | 
			
		||||
                      "value": {
 | 
			
		||||
                        "value": 1.0,
 | 
			
		||||
                        "suffix": "None"
 | 
			
		||||
                      }
 | 
			
		||||
                    },
 | 
			
		||||
                    "start": 97,
 | 
			
		||||
                    "type": "BinaryExpression",
 | 
			
		||||
                    "type": "BinaryExpression"
 | 
			
		||||
                  },
 | 
			
		||||
                  "end": 106,
 | 
			
		||||
                  "start": 90,
 | 
			
		||||
                  "type": "ReturnStatement",
 | 
			
		||||
                  "type": "ReturnStatement"
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "one": {
 | 
			
		||||
    "type": "Function",
 | 
			
		||||
    "expression": {
 | 
			
		||||
      "body": {
 | 
			
		||||
        "body": [
 | 
			
		||||
          {
 | 
			
		||||
            "argument": {
 | 
			
		||||
              "end": 106,
 | 
			
		||||
              "left": {
 | 
			
		||||
                "arguments": [],
 | 
			
		||||
                "callee": {
 | 
			
		||||
                  "end": 100,
 | 
			
		||||
                  "name": "two",
 | 
			
		||||
                  "start": 97,
 | 
			
		||||
                  "type": "Identifier"
 | 
			
		||||
                },
 | 
			
		||||
                "end": 102,
 | 
			
		||||
                "start": 97,
 | 
			
		||||
                "type": "CallExpression",
 | 
			
		||||
                "type": "CallExpression"
 | 
			
		||||
              },
 | 
			
		||||
              "operator": "-",
 | 
			
		||||
              "right": {
 | 
			
		||||
                "end": 106,
 | 
			
		||||
                "raw": "1",
 | 
			
		||||
                "start": 105,
 | 
			
		||||
                "type": "Literal",
 | 
			
		||||
                "type": "Literal",
 | 
			
		||||
                "value": {
 | 
			
		||||
                  "value": 1.0,
 | 
			
		||||
                  "suffix": "None"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "end": 108,
 | 
			
		||||
              "start": 86
 | 
			
		||||
              },
 | 
			
		||||
              "start": 97,
 | 
			
		||||
              "type": "BinaryExpression",
 | 
			
		||||
              "type": "BinaryExpression"
 | 
			
		||||
            },
 | 
			
		||||
            "end": 108,
 | 
			
		||||
            "params": [],
 | 
			
		||||
            "start": 83,
 | 
			
		||||
            "type": "FunctionExpression"
 | 
			
		||||
          },
 | 
			
		||||
          "memory": [
 | 
			
		||||
            0,
 | 
			
		||||
            1
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                83,
 | 
			
		||||
                108,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "two": {
 | 
			
		||||
          "type": "Function",
 | 
			
		||||
          "expression": {
 | 
			
		||||
            "body": {
 | 
			
		||||
              "body": [
 | 
			
		||||
                {
 | 
			
		||||
                  "argument": {
 | 
			
		||||
                    "end": 388,
 | 
			
		||||
                    "moduleId": 1,
 | 
			
		||||
                    "raw": "5",
 | 
			
		||||
                    "start": 387,
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                      "value": 5.0,
 | 
			
		||||
                      "suffix": "None"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "end": 388,
 | 
			
		||||
                  "moduleId": 1,
 | 
			
		||||
                  "start": 380,
 | 
			
		||||
                  "type": "ReturnStatement",
 | 
			
		||||
                  "type": "ReturnStatement"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "end": 390,
 | 
			
		||||
              "moduleId": 1,
 | 
			
		||||
              "start": 378
 | 
			
		||||
            },
 | 
			
		||||
            "end": 390,
 | 
			
		||||
            "moduleId": 1,
 | 
			
		||||
            "params": [],
 | 
			
		||||
            "start": 372,
 | 
			
		||||
            "type": "FunctionExpression"
 | 
			
		||||
          },
 | 
			
		||||
          "memory": [
 | 
			
		||||
            1,
 | 
			
		||||
            1
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                372,
 | 
			
		||||
                390,
 | 
			
		||||
                1
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [
 | 
			
		||||
        {
 | 
			
		||||
          "parent_snapshot": null,
 | 
			
		||||
          "data": {
 | 
			
		||||
            "one": {
 | 
			
		||||
              "type": "Tombstone",
 | 
			
		||||
              "value": null,
 | 
			
		||||
              "__meta": []
 | 
			
		||||
            }
 | 
			
		||||
            "end": 106,
 | 
			
		||||
            "start": 90,
 | 
			
		||||
            "type": "ReturnStatement",
 | 
			
		||||
            "type": "ReturnStatement"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "parent": null
 | 
			
		||||
        ],
 | 
			
		||||
        "end": 108,
 | 
			
		||||
        "start": 86
 | 
			
		||||
      },
 | 
			
		||||
      "end": 108,
 | 
			
		||||
      "params": [],
 | 
			
		||||
      "start": 83,
 | 
			
		||||
      "type": "FunctionExpression"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "part001": {
 | 
			
		||||
          "type": "Solid",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": [
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  109,
 | 
			
		||||
                  127,
 | 
			
		||||
                  1
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  133,
 | 
			
		||||
                  152,
 | 
			
		||||
                  1
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  158,
 | 
			
		||||
                  177,
 | 
			
		||||
                  1
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  183,
 | 
			
		||||
                  202,
 | 
			
		||||
                  1
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  208,
 | 
			
		||||
                  233,
 | 
			
		||||
                  1
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  239,
 | 
			
		||||
                  260,
 | 
			
		||||
                  1
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  266,
 | 
			
		||||
                  285,
 | 
			
		||||
                  1
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  291,
 | 
			
		||||
                  298,
 | 
			
		||||
                  1
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudePlane"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "sketch": {
 | 
			
		||||
              "type": "Sketch",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "paths": [
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      109,
 | 
			
		||||
                      127,
 | 
			
		||||
                      1
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    4.0,
 | 
			
		||||
                    12.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    6.0,
 | 
			
		||||
                    12.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      133,
 | 
			
		||||
                      152,
 | 
			
		||||
                      1
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    6.0,
 | 
			
		||||
                    12.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    6.0,
 | 
			
		||||
                    6.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      158,
 | 
			
		||||
                      177,
 | 
			
		||||
                      1
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    6.0,
 | 
			
		||||
                    6.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      183,
 | 
			
		||||
                      202,
 | 
			
		||||
                      1
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    0.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    -6.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      208,
 | 
			
		||||
                      233,
 | 
			
		||||
                      1
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    10.0,
 | 
			
		||||
                    -6.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    6.25,
 | 
			
		||||
                    -10.5
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      239,
 | 
			
		||||
                      260,
 | 
			
		||||
                      1
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    6.25,
 | 
			
		||||
                    -10.5
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    6.25,
 | 
			
		||||
                    -16.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      266,
 | 
			
		||||
                      285,
 | 
			
		||||
                      1
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    6.25,
 | 
			
		||||
                    -16.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    4.25,
 | 
			
		||||
                    -16.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      291,
 | 
			
		||||
                      298,
 | 
			
		||||
                      1
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    4.25,
 | 
			
		||||
                    -16.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    4.0,
 | 
			
		||||
                    12.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "ToPoint"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "on": {
 | 
			
		||||
                "type": "plane",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "artifactId": "[uuid]",
 | 
			
		||||
                "value": "XY",
 | 
			
		||||
                "origin": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "xAxis": {
 | 
			
		||||
                  "x": 1.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "yAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 1.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "zAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 1.0
 | 
			
		||||
                },
 | 
			
		||||
                "units": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "__meta": []
 | 
			
		||||
              },
 | 
			
		||||
              "start": {
 | 
			
		||||
                "from": [
 | 
			
		||||
                  4.0,
 | 
			
		||||
                  12.0
 | 
			
		||||
                ],
 | 
			
		||||
                "to": [
 | 
			
		||||
                  4.0,
 | 
			
		||||
                  12.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    77,
 | 
			
		||||
                    103,
 | 
			
		||||
                    1
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "originalId": "[uuid]",
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    77,
 | 
			
		||||
                    103,
 | 
			
		||||
                    1
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "height": 0.0,
 | 
			
		||||
            "startCapId": null,
 | 
			
		||||
            "endCapId": null,
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  77,
 | 
			
		||||
                  103,
 | 
			
		||||
                  1
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "two": {
 | 
			
		||||
          "type": "Function",
 | 
			
		||||
          "expression": {
 | 
			
		||||
            "body": {
 | 
			
		||||
              "body": [
 | 
			
		||||
                {
 | 
			
		||||
                  "argument": {
 | 
			
		||||
                    "end": 388,
 | 
			
		||||
                    "moduleId": 1,
 | 
			
		||||
                    "raw": "5",
 | 
			
		||||
                    "start": 387,
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                      "value": 5.0,
 | 
			
		||||
                      "suffix": "None"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "end": 388,
 | 
			
		||||
                  "moduleId": 1,
 | 
			
		||||
                  "start": 380,
 | 
			
		||||
                  "type": "ReturnStatement",
 | 
			
		||||
                  "type": "ReturnStatement"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "end": 390,
 | 
			
		||||
    "memory": [
 | 
			
		||||
      0,
 | 
			
		||||
      1
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          83,
 | 
			
		||||
          108,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "two": {
 | 
			
		||||
    "type": "Function",
 | 
			
		||||
    "expression": {
 | 
			
		||||
      "body": {
 | 
			
		||||
        "body": [
 | 
			
		||||
          {
 | 
			
		||||
            "argument": {
 | 
			
		||||
              "end": 388,
 | 
			
		||||
              "moduleId": 1,
 | 
			
		||||
              "start": 378
 | 
			
		||||
              "raw": "5",
 | 
			
		||||
              "start": 387,
 | 
			
		||||
              "type": "Literal",
 | 
			
		||||
              "type": "Literal",
 | 
			
		||||
              "value": {
 | 
			
		||||
                "value": 5.0,
 | 
			
		||||
                "suffix": "None"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "end": 390,
 | 
			
		||||
            "end": 388,
 | 
			
		||||
            "moduleId": 1,
 | 
			
		||||
            "params": [],
 | 
			
		||||
            "start": 372,
 | 
			
		||||
            "type": "FunctionExpression"
 | 
			
		||||
          },
 | 
			
		||||
          "memory": [
 | 
			
		||||
            1,
 | 
			
		||||
            1
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                372,
 | 
			
		||||
                390,
 | 
			
		||||
                1
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [
 | 
			
		||||
        {
 | 
			
		||||
          "parent_snapshot": null,
 | 
			
		||||
          "data": {
 | 
			
		||||
            "two": {
 | 
			
		||||
              "type": "Tombstone",
 | 
			
		||||
              "value": null,
 | 
			
		||||
              "__meta": []
 | 
			
		||||
            }
 | 
			
		||||
            "start": 380,
 | 
			
		||||
            "type": "ReturnStatement",
 | 
			
		||||
            "type": "ReturnStatement"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
        ],
 | 
			
		||||
        "end": 390,
 | 
			
		||||
        "moduleId": 1,
 | 
			
		||||
        "start": 378
 | 
			
		||||
      },
 | 
			
		||||
      "end": 390,
 | 
			
		||||
      "moduleId": 1,
 | 
			
		||||
      "params": [],
 | 
			
		||||
      "start": 372,
 | 
			
		||||
      "type": "FunctionExpression"
 | 
			
		||||
    },
 | 
			
		||||
    "memory": [
 | 
			
		||||
      1,
 | 
			
		||||
      1
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          372,
 | 
			
		||||
          390,
 | 
			
		||||
          1
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,200 +1,88 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing import_glob.kcl
 | 
			
		||||
description: Variables in memory after executing import_glob.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "foo": {
 | 
			
		||||
          "type": "Function",
 | 
			
		||||
          "expression": {
 | 
			
		||||
            "body": {
 | 
			
		||||
              "body": [
 | 
			
		||||
                {
 | 
			
		||||
                  "argument": {
 | 
			
		||||
                    "end": 47,
 | 
			
		||||
                    "moduleId": 1,
 | 
			
		||||
                    "raw": "42",
 | 
			
		||||
                    "start": 45,
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                      "value": 42.0,
 | 
			
		||||
                      "suffix": "None"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "end": 47,
 | 
			
		||||
                  "moduleId": 1,
 | 
			
		||||
                  "start": 38,
 | 
			
		||||
                  "type": "ReturnStatement",
 | 
			
		||||
                  "type": "ReturnStatement"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "end": 49,
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "foo": {
 | 
			
		||||
    "type": "Function",
 | 
			
		||||
    "expression": {
 | 
			
		||||
      "body": {
 | 
			
		||||
        "body": [
 | 
			
		||||
          {
 | 
			
		||||
            "argument": {
 | 
			
		||||
              "end": 47,
 | 
			
		||||
              "moduleId": 1,
 | 
			
		||||
              "start": 34
 | 
			
		||||
              "raw": "42",
 | 
			
		||||
              "start": 45,
 | 
			
		||||
              "type": "Literal",
 | 
			
		||||
              "type": "Literal",
 | 
			
		||||
              "value": {
 | 
			
		||||
                "value": 42.0,
 | 
			
		||||
                "suffix": "None"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "end": 49,
 | 
			
		||||
            "end": 47,
 | 
			
		||||
            "moduleId": 1,
 | 
			
		||||
            "params": [],
 | 
			
		||||
            "start": 31,
 | 
			
		||||
            "type": "FunctionExpression"
 | 
			
		||||
          },
 | 
			
		||||
          "memory": [
 | 
			
		||||
            1,
 | 
			
		||||
            1
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                31,
 | 
			
		||||
                49,
 | 
			
		||||
                1
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "three": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 3.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                15,
 | 
			
		||||
                16,
 | 
			
		||||
                1
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "foo": {
 | 
			
		||||
          "type": "Function",
 | 
			
		||||
          "expression": {
 | 
			
		||||
            "body": {
 | 
			
		||||
              "body": [
 | 
			
		||||
                {
 | 
			
		||||
                  "argument": {
 | 
			
		||||
                    "end": 47,
 | 
			
		||||
                    "moduleId": 1,
 | 
			
		||||
                    "raw": "42",
 | 
			
		||||
                    "start": 45,
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                      "value": 42.0,
 | 
			
		||||
                      "suffix": "None"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "end": 47,
 | 
			
		||||
                  "moduleId": 1,
 | 
			
		||||
                  "start": 38,
 | 
			
		||||
                  "type": "ReturnStatement",
 | 
			
		||||
                  "type": "ReturnStatement"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "end": 49,
 | 
			
		||||
              "moduleId": 1,
 | 
			
		||||
              "start": 34
 | 
			
		||||
            },
 | 
			
		||||
            "end": 49,
 | 
			
		||||
            "moduleId": 1,
 | 
			
		||||
            "params": [],
 | 
			
		||||
            "start": 31,
 | 
			
		||||
            "type": "FunctionExpression"
 | 
			
		||||
          },
 | 
			
		||||
          "memory": [
 | 
			
		||||
            1,
 | 
			
		||||
            1
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                31,
 | 
			
		||||
                49,
 | 
			
		||||
                1
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "three": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 3.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                15,
 | 
			
		||||
                16,
 | 
			
		||||
                1
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [
 | 
			
		||||
        {
 | 
			
		||||
          "parent_snapshot": null,
 | 
			
		||||
          "data": {
 | 
			
		||||
            "foo": {
 | 
			
		||||
              "type": "Tombstone",
 | 
			
		||||
              "value": null,
 | 
			
		||||
              "__meta": []
 | 
			
		||||
            }
 | 
			
		||||
            "start": 38,
 | 
			
		||||
            "type": "ReturnStatement",
 | 
			
		||||
            "type": "ReturnStatement"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
        ],
 | 
			
		||||
        "end": 49,
 | 
			
		||||
        "moduleId": 1,
 | 
			
		||||
        "start": 34
 | 
			
		||||
      },
 | 
			
		||||
      "end": 49,
 | 
			
		||||
      "moduleId": 1,
 | 
			
		||||
      "params": [],
 | 
			
		||||
      "start": 31,
 | 
			
		||||
      "type": "FunctionExpression"
 | 
			
		||||
    },
 | 
			
		||||
    "memory": [
 | 
			
		||||
      1,
 | 
			
		||||
      1
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          31,
 | 
			
		||||
          49,
 | 
			
		||||
          1
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "three": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 3.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          15,
 | 
			
		||||
          16,
 | 
			
		||||
          1
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,277 +1,75 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing import_side_effect.kcl
 | 
			
		||||
description: Variables in memory after executing import_side_effect.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "foo": {
 | 
			
		||||
          "type": "Function",
 | 
			
		||||
          "expression": {
 | 
			
		||||
            "body": {
 | 
			
		||||
              "body": [
 | 
			
		||||
                {
 | 
			
		||||
                  "argument": {
 | 
			
		||||
                    "end": 32,
 | 
			
		||||
                    "moduleId": 1,
 | 
			
		||||
                    "raw": "0",
 | 
			
		||||
                    "start": 31,
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                      "value": 0.0,
 | 
			
		||||
                      "suffix": "None"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "end": 32,
 | 
			
		||||
                  "moduleId": 1,
 | 
			
		||||
                  "start": 24,
 | 
			
		||||
                  "type": "ReturnStatement",
 | 
			
		||||
                  "type": "ReturnStatement"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "end": 34,
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "foo": {
 | 
			
		||||
    "type": "Function",
 | 
			
		||||
    "expression": {
 | 
			
		||||
      "body": {
 | 
			
		||||
        "body": [
 | 
			
		||||
          {
 | 
			
		||||
            "argument": {
 | 
			
		||||
              "end": 32,
 | 
			
		||||
              "moduleId": 1,
 | 
			
		||||
              "start": 22
 | 
			
		||||
              "raw": "0",
 | 
			
		||||
              "start": 31,
 | 
			
		||||
              "type": "Literal",
 | 
			
		||||
              "type": "Literal",
 | 
			
		||||
              "value": {
 | 
			
		||||
                "value": 0.0,
 | 
			
		||||
                "suffix": "None"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "end": 34,
 | 
			
		||||
            "end": 32,
 | 
			
		||||
            "moduleId": 1,
 | 
			
		||||
            "params": [],
 | 
			
		||||
            "start": 16,
 | 
			
		||||
            "type": "FunctionExpression"
 | 
			
		||||
          },
 | 
			
		||||
          "memory": [
 | 
			
		||||
            1,
 | 
			
		||||
            1
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                16,
 | 
			
		||||
                34,
 | 
			
		||||
                1
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
            "start": 24,
 | 
			
		||||
            "type": "ReturnStatement",
 | 
			
		||||
            "type": "ReturnStatement"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "end": 34,
 | 
			
		||||
        "moduleId": 1,
 | 
			
		||||
        "start": 22
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
      "end": 34,
 | 
			
		||||
      "moduleId": 1,
 | 
			
		||||
      "params": [],
 | 
			
		||||
      "start": 16,
 | 
			
		||||
      "type": "FunctionExpression"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "foo": {
 | 
			
		||||
          "type": "Function",
 | 
			
		||||
          "expression": {
 | 
			
		||||
            "body": {
 | 
			
		||||
              "body": [
 | 
			
		||||
                {
 | 
			
		||||
                  "argument": {
 | 
			
		||||
                    "end": 32,
 | 
			
		||||
                    "moduleId": 1,
 | 
			
		||||
                    "raw": "0",
 | 
			
		||||
                    "start": 31,
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "type": "Literal",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                      "value": 0.0,
 | 
			
		||||
                      "suffix": "None"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  "end": 32,
 | 
			
		||||
                  "moduleId": 1,
 | 
			
		||||
                  "start": 24,
 | 
			
		||||
                  "type": "ReturnStatement",
 | 
			
		||||
                  "type": "ReturnStatement"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "end": 34,
 | 
			
		||||
              "moduleId": 1,
 | 
			
		||||
              "start": 22
 | 
			
		||||
            },
 | 
			
		||||
            "end": 34,
 | 
			
		||||
            "moduleId": 1,
 | 
			
		||||
            "params": [],
 | 
			
		||||
            "start": 16,
 | 
			
		||||
            "type": "FunctionExpression"
 | 
			
		||||
          },
 | 
			
		||||
          "memory": [
 | 
			
		||||
            1,
 | 
			
		||||
            1
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                16,
 | 
			
		||||
                34,
 | 
			
		||||
                1
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "part001": {
 | 
			
		||||
          "type": "Sketch",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Sketch",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "paths": [
 | 
			
		||||
              {
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    106,
 | 
			
		||||
                    149,
 | 
			
		||||
                    1
 | 
			
		||||
                  ]
 | 
			
		||||
                },
 | 
			
		||||
                "ccw": true,
 | 
			
		||||
                "center": [
 | 
			
		||||
                  0.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "from": [
 | 
			
		||||
                  10.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "radius": 10.0,
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "to": [
 | 
			
		||||
                  10.0,
 | 
			
		||||
                  0.0
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "Circle"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "on": {
 | 
			
		||||
              "type": "plane",
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "value": "XY",
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "xAxis": {
 | 
			
		||||
                "x": 1.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "yAxis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 1.0,
 | 
			
		||||
                "z": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "zAxis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": []
 | 
			
		||||
            },
 | 
			
		||||
            "start": {
 | 
			
		||||
              "from": [
 | 
			
		||||
                10.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "to": [
 | 
			
		||||
                10.0,
 | 
			
		||||
                0.0
 | 
			
		||||
              ],
 | 
			
		||||
              "tag": null,
 | 
			
		||||
              "__geoMeta": {
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  106,
 | 
			
		||||
                  149,
 | 
			
		||||
                  1
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "originalId": "[uuid]",
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  106,
 | 
			
		||||
                  149,
 | 
			
		||||
                  1
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [
 | 
			
		||||
        {
 | 
			
		||||
          "parent_snapshot": null,
 | 
			
		||||
          "data": {
 | 
			
		||||
            "foo": {
 | 
			
		||||
              "type": "Tombstone",
 | 
			
		||||
              "value": null,
 | 
			
		||||
              "__meta": []
 | 
			
		||||
            },
 | 
			
		||||
            "part001": {
 | 
			
		||||
              "type": "Tombstone",
 | 
			
		||||
              "value": null,
 | 
			
		||||
              "__meta": []
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
    "memory": [
 | 
			
		||||
      1,
 | 
			
		||||
      1
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          16,
 | 
			
		||||
          34,
 | 
			
		||||
          1
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,210 +1,170 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing import_whole.kcl
 | 
			
		||||
snapshot_kind: text
 | 
			
		||||
description: Variables in memory after executing import_whole.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "bar": {
 | 
			
		||||
          "type": "Solid",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "artifactId": "[uuid]",
 | 
			
		||||
            "value": [
 | 
			
		||||
              {
 | 
			
		||||
                "faceId": "[uuid]",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  61,
 | 
			
		||||
                  104,
 | 
			
		||||
                  1
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "type": "extrudeArc"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "sketch": {
 | 
			
		||||
              "type": "Sketch",
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "bar": {
 | 
			
		||||
    "type": "Solid",
 | 
			
		||||
    "value": {
 | 
			
		||||
      "type": "Solid",
 | 
			
		||||
      "id": "[uuid]",
 | 
			
		||||
      "artifactId": "[uuid]",
 | 
			
		||||
      "value": [
 | 
			
		||||
        {
 | 
			
		||||
          "faceId": "[uuid]",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            61,
 | 
			
		||||
            104,
 | 
			
		||||
            1
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "type": "extrudeArc"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "sketch": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "id": "[uuid]",
 | 
			
		||||
        "paths": [
 | 
			
		||||
          {
 | 
			
		||||
            "__geoMeta": {
 | 
			
		||||
              "id": "[uuid]",
 | 
			
		||||
              "paths": [
 | 
			
		||||
                {
 | 
			
		||||
                  "__geoMeta": {
 | 
			
		||||
                    "id": "[uuid]",
 | 
			
		||||
                    "sourceRange": [
 | 
			
		||||
                      61,
 | 
			
		||||
                      104,
 | 
			
		||||
                      1
 | 
			
		||||
                    ]
 | 
			
		||||
                  },
 | 
			
		||||
                  "ccw": true,
 | 
			
		||||
                  "center": [
 | 
			
		||||
                    5.0,
 | 
			
		||||
                    5.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "from": [
 | 
			
		||||
                    15.0,
 | 
			
		||||
                    5.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "radius": 10.0,
 | 
			
		||||
                  "tag": null,
 | 
			
		||||
                  "to": [
 | 
			
		||||
                    15.0,
 | 
			
		||||
                    5.0
 | 
			
		||||
                  ],
 | 
			
		||||
                  "type": "Circle"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "on": {
 | 
			
		||||
                "type": "plane",
 | 
			
		||||
                "id": "[uuid]",
 | 
			
		||||
                "artifactId": "[uuid]",
 | 
			
		||||
                "value": "XY",
 | 
			
		||||
                "origin": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "xAxis": {
 | 
			
		||||
                  "x": 1.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "yAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 1.0,
 | 
			
		||||
                  "z": 0.0
 | 
			
		||||
                },
 | 
			
		||||
                "zAxis": {
 | 
			
		||||
                  "x": 0.0,
 | 
			
		||||
                  "y": 0.0,
 | 
			
		||||
                  "z": 1.0
 | 
			
		||||
                },
 | 
			
		||||
                "units": {
 | 
			
		||||
                  "type": "Inches"
 | 
			
		||||
                },
 | 
			
		||||
                "__meta": []
 | 
			
		||||
              },
 | 
			
		||||
              "start": {
 | 
			
		||||
                "from": [
 | 
			
		||||
                  15.0,
 | 
			
		||||
                  5.0
 | 
			
		||||
                ],
 | 
			
		||||
                "to": [
 | 
			
		||||
                  15.0,
 | 
			
		||||
                  5.0
 | 
			
		||||
                ],
 | 
			
		||||
                "tag": null,
 | 
			
		||||
                "__geoMeta": {
 | 
			
		||||
                  "id": "[uuid]",
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    61,
 | 
			
		||||
                    104,
 | 
			
		||||
                    1
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "artifactId": "[uuid]",
 | 
			
		||||
              "originalId": "[uuid]",
 | 
			
		||||
              "units": {
 | 
			
		||||
                "type": "Inches"
 | 
			
		||||
              },
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    61,
 | 
			
		||||
                    104,
 | 
			
		||||
                    1
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                61,
 | 
			
		||||
                104,
 | 
			
		||||
                1
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "height": 10.0,
 | 
			
		||||
            "startCapId": "[uuid]",
 | 
			
		||||
            "endCapId": "[uuid]",
 | 
			
		||||
            "units": {
 | 
			
		||||
              "type": "Inches"
 | 
			
		||||
            },
 | 
			
		||||
            "__meta": [
 | 
			
		||||
              {
 | 
			
		||||
                "sourceRange": [
 | 
			
		||||
                  61,
 | 
			
		||||
                  104,
 | 
			
		||||
                  1
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            "ccw": true,
 | 
			
		||||
            "center": [
 | 
			
		||||
              5.0,
 | 
			
		||||
              5.0
 | 
			
		||||
            ],
 | 
			
		||||
            "from": [
 | 
			
		||||
              15.0,
 | 
			
		||||
              5.0
 | 
			
		||||
            ],
 | 
			
		||||
            "radius": 10.0,
 | 
			
		||||
            "tag": null,
 | 
			
		||||
            "to": [
 | 
			
		||||
              15.0,
 | 
			
		||||
              5.0
 | 
			
		||||
            ],
 | 
			
		||||
            "type": "Circle"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "on": {
 | 
			
		||||
          "type": "plane",
 | 
			
		||||
          "id": "[uuid]",
 | 
			
		||||
          "artifactId": "[uuid]",
 | 
			
		||||
          "value": "XY",
 | 
			
		||||
          "origin": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "xAxis": {
 | 
			
		||||
            "x": 1.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "yAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 1.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "zAxis": {
 | 
			
		||||
            "x": 0.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 1.0
 | 
			
		||||
          },
 | 
			
		||||
          "units": {
 | 
			
		||||
            "type": "Inches"
 | 
			
		||||
          },
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "start": {
 | 
			
		||||
          "from": [
 | 
			
		||||
            15.0,
 | 
			
		||||
            5.0
 | 
			
		||||
          ],
 | 
			
		||||
          "to": [
 | 
			
		||||
            15.0,
 | 
			
		||||
            5.0
 | 
			
		||||
          ],
 | 
			
		||||
          "tag": null,
 | 
			
		||||
          "__geoMeta": {
 | 
			
		||||
            "id": "[uuid]",
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              61,
 | 
			
		||||
              104,
 | 
			
		||||
              1
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "foo": {
 | 
			
		||||
          "type": "Module",
 | 
			
		||||
          "value": 1,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                34,
 | 
			
		||||
                66,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
        "artifactId": "[uuid]",
 | 
			
		||||
        "originalId": "[uuid]",
 | 
			
		||||
        "units": {
 | 
			
		||||
          "type": "Inches"
 | 
			
		||||
        },
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              61,
 | 
			
		||||
              104,
 | 
			
		||||
              1
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "height": 10.0,
 | 
			
		||||
      "startCapId": "[uuid]",
 | 
			
		||||
      "endCapId": "[uuid]",
 | 
			
		||||
      "units": {
 | 
			
		||||
        "type": "Inches"
 | 
			
		||||
      },
 | 
			
		||||
      "__meta": [
 | 
			
		||||
        {
 | 
			
		||||
          "sourceRange": [
 | 
			
		||||
            61,
 | 
			
		||||
            104,
 | 
			
		||||
            1
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
  },
 | 
			
		||||
  "foo": {
 | 
			
		||||
    "type": "Module",
 | 
			
		||||
    "value": 1,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          34,
 | 
			
		||||
          66,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,131 +1,118 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl/src/simulation_tests.rs
 | 
			
		||||
description: Program memory after executing index_of_array.kcl
 | 
			
		||||
description: Variables in memory after executing index_of_array.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "environments": [
 | 
			
		||||
    {
 | 
			
		||||
      "bindings": {
 | 
			
		||||
        "HALF_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 180.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 90.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "THREE_QUARTER_TURN": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 270.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "ZERO": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0,
 | 
			
		||||
          "__meta": []
 | 
			
		||||
        },
 | 
			
		||||
        "arr": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 90.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    42,
 | 
			
		||||
                    44,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 91.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    46,
 | 
			
		||||
                    48,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 92.0,
 | 
			
		||||
              "__meta": [
 | 
			
		||||
                {
 | 
			
		||||
                  "sourceRange": [
 | 
			
		||||
                    50,
 | 
			
		||||
                    52,
 | 
			
		||||
                    0
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                41,
 | 
			
		||||
                53,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "i": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 1.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                252,
 | 
			
		||||
                262,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "result0": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 91.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                46,
 | 
			
		||||
                48,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "result1": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 91.0,
 | 
			
		||||
          "__meta": [
 | 
			
		||||
            {
 | 
			
		||||
              "sourceRange": [
 | 
			
		||||
                46,
 | 
			
		||||
                48,
 | 
			
		||||
                0
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
  "HALF_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 180.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 90.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "THREE_QUARTER_TURN": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 270.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "ZERO": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 0.0,
 | 
			
		||||
    "__meta": []
 | 
			
		||||
  },
 | 
			
		||||
  "arr": {
 | 
			
		||||
    "type": "Array",
 | 
			
		||||
    "value": [
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 90.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              42,
 | 
			
		||||
              44,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "snapshots": [],
 | 
			
		||||
      "parent": null
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "currentEnv": [
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "callStack": []
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 91.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              46,
 | 
			
		||||
              48,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "type": "Number",
 | 
			
		||||
        "value": 92.0,
 | 
			
		||||
        "__meta": [
 | 
			
		||||
          {
 | 
			
		||||
            "sourceRange": [
 | 
			
		||||
              50,
 | 
			
		||||
              52,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          41,
 | 
			
		||||
          53,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "i": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 1.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          252,
 | 
			
		||||
          262,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "result0": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 91.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          46,
 | 
			
		||||
          48,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "result1": {
 | 
			
		||||
    "type": "Number",
 | 
			
		||||
    "value": 91.0,
 | 
			
		||||
    "__meta": [
 | 
			
		||||
      {
 | 
			
		||||
        "sourceRange": [
 | 
			
		||||
          46,
 | 
			
		||||
          48,
 | 
			
		||||
          0
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user