add preliminay 'show' function
This commit is contained in:
@ -59,8 +59,9 @@ log(5, myVar)`;
|
|||||||
path rightPath = lineTo(1,0)
|
path rightPath = lineTo(1,0)
|
||||||
close()
|
close()
|
||||||
}
|
}
|
||||||
|
show(mySketch)
|
||||||
`;
|
`;
|
||||||
const { root } = exe(code);
|
const { root, return: _return } = exe(code);
|
||||||
expect(root.mySketch.map(({ previousPath, ...rest }: any) => rest)).toEqual(
|
expect(root.mySketch.map(({ previousPath, ...rest }: any) => rest)).toEqual(
|
||||||
[
|
[
|
||||||
{ type: "base", from: [0, 0] },
|
{ type: "base", from: [0, 0] },
|
||||||
@ -71,6 +72,15 @@ log(5, myVar)`;
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
expect(root.mySketch[0]).toEqual(root.mySketch[4].firstPath);
|
expect(root.mySketch[0]).toEqual(root.mySketch[4].firstPath);
|
||||||
|
// hmm not sure what handle the "show" function
|
||||||
|
expect(_return).toEqual([
|
||||||
|
{
|
||||||
|
type: "Identifier",
|
||||||
|
start: 108,
|
||||||
|
end: 116,
|
||||||
|
name: "mySketch",
|
||||||
|
},
|
||||||
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ export interface ProgramMemory {
|
|||||||
export const executor = (
|
export const executor = (
|
||||||
node: Program,
|
node: Program,
|
||||||
programMemory: ProgramMemory = { root: {}, _sketch: [] },
|
programMemory: ProgramMemory = { root: {}, _sketch: [] },
|
||||||
options: { bodyType: "default" | "sketch" } = { bodyType: "default" }
|
options: { bodyType: "root" | "sketch" | "block" } = { bodyType: "root" }
|
||||||
): any => {
|
): any => {
|
||||||
const _programMemory: ProgramMemory = {
|
const _programMemory: ProgramMemory = {
|
||||||
root: {
|
root: {
|
||||||
@ -65,7 +65,7 @@ export const executor = (
|
|||||||
fnInit.params.forEach((param, index) => {
|
fnInit.params.forEach((param, index) => {
|
||||||
fnMemory.root[param.name] = args[index];
|
fnMemory.root[param.name] = args[index];
|
||||||
});
|
});
|
||||||
return executor(fnInit.body, fnMemory).return;
|
return executor(fnInit.body, fnMemory, {bodyType: 'block'}).return;
|
||||||
};
|
};
|
||||||
} else if (declaration.init.type === "CallExpression") {
|
} else if (declaration.init.type === "CallExpression") {
|
||||||
const fnName = declaration.init.callee.name;
|
const fnName = declaration.init.callee.name;
|
||||||
@ -115,6 +115,14 @@ export const executor = (
|
|||||||
}
|
}
|
||||||
const result = sketchFns[functionName](_programMemory, "", ...args);
|
const result = sketchFns[functionName](_programMemory, "", ...args);
|
||||||
_programMemory._sketch = [...result.programMemory._sketch];
|
_programMemory._sketch = [...result.programMemory._sketch];
|
||||||
|
} else if("show" === functionName) {
|
||||||
|
if (options.bodyType !== "root") {
|
||||||
|
throw new Error(
|
||||||
|
`Cannot call ${functionName} outside of a root`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
_programMemory.return = expression.arguments;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
_programMemory.root[functionName](...args);
|
_programMemory.root[functionName](...args);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user