Grackle: handle complicated nested computed objects (#1348)
Previously, Grackle could compile a single computed property like `array[x]`. But it couldn't handle:
- Nested properties like `array[x][y]`
- Nested objects like `obj[x][y]`
- Arrays nested in objects, like `{x: [1,2,3]}`
- Objects in arrays like `[{a: 1}]`
It was quite difficult to find a way to handle this, which is why I started the EP Debugger project. The debugger helped me understand the VM much better and figure out a better way to handle these cases (the two new instructions AddrOfMember and CopyLen). Now Grackle can compile those cases!
This commit is contained in:
@ -498,7 +498,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"asset": {
|
"asset": {
|
||||||
"generator": "kittycad.io",
|
"generator": "zoo.dev",
|
||||||
"version": "2.0"
|
"version": "2.0"
|
||||||
},
|
},
|
||||||
"buffers": [
|
"buffers": [
|
||||||
@ -882,7 +882,7 @@
|
|||||||
"loops": [
|
"loops": [
|
||||||
[
|
[
|
||||||
14,
|
14,
|
||||||
-1
|
1
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -1953,12 +1953,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
-1,
|
|
||||||
0,
|
0,
|
||||||
|
1,
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
-1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0,
|
0,
|
||||||
-0.0127,
|
-0.0127,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -1968,12 +1973,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
|
1,
|
||||||
0,
|
0,
|
||||||
-1,
|
0
|
||||||
-0
|
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
-0,
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.039310000000000005,
|
0.039310000000000005,
|
||||||
-0.0254,
|
-0.0254,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -1983,12 +1993,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
|
0.81915,
|
||||||
-0.5735800000000001,
|
-0.5735800000000001,
|
||||||
-0.81915,
|
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.11489,
|
0.11489,
|
||||||
-0.050800000000000005,
|
-0.050800000000000005,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -1998,12 +2013,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
|
1,
|
||||||
0,
|
0,
|
||||||
-1,
|
0
|
||||||
-0
|
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
-0,
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.19623,
|
0.19623,
|
||||||
-0.0762,
|
-0.0762,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -2013,12 +2033,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
1,
|
|
||||||
0,
|
0,
|
||||||
-0
|
1,
|
||||||
|
0
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
-0,
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.2413,
|
0.2413,
|
||||||
-0.06985000000000001,
|
-0.06985000000000001,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -2028,12 +2053,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
0,
|
|
||||||
1,
|
1,
|
||||||
-0
|
0,
|
||||||
|
0
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
0,
|
||||||
|
-0,
|
||||||
|
-1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.19823,
|
0.19823,
|
||||||
-0.0635,
|
-0.0635,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -2043,12 +2073,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
0.5735800000000001,
|
|
||||||
0.81915,
|
0.81915,
|
||||||
|
-0.5735800000000001,
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
-1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.10982,
|
0.10982,
|
||||||
-0.03175,
|
-0.03175,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -2058,12 +2093,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
|
0.90631,
|
||||||
0.4226200000000001,
|
0.4226200000000001,
|
||||||
-0.90631,
|
0
|
||||||
-0
|
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
-0,
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.10533,
|
0.10533,
|
||||||
0.01905,
|
0.01905,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -2073,12 +2113,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
|
1,
|
||||||
0,
|
0,
|
||||||
-1,
|
0
|
||||||
-0
|
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
-0,
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.19374,
|
0.19374,
|
||||||
0.0381,
|
0.0381,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -2088,12 +2133,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
1,
|
|
||||||
0,
|
0,
|
||||||
-0
|
1,
|
||||||
|
0
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
-0,
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.2413,
|
0.2413,
|
||||||
0.04445,
|
0.04445,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -2103,12 +2153,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
0,
|
|
||||||
1,
|
1,
|
||||||
-0
|
0,
|
||||||
|
0
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
0,
|
||||||
|
-0,
|
||||||
|
-1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.19234,
|
0.19234,
|
||||||
0.050800000000000005,
|
0.050800000000000005,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -2118,12 +2173,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
-0.4226200000000001,
|
|
||||||
0.90631,
|
0.90631,
|
||||||
|
0.4226200000000001,
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
-1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.11614,
|
0.11614,
|
||||||
0.0381,
|
0.0381,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -2133,12 +2193,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
0,
|
|
||||||
1,
|
1,
|
||||||
-0
|
0,
|
||||||
|
0
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
0,
|
||||||
|
-0,
|
||||||
|
-1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0.04445,
|
0.04445,
|
||||||
0.0254,
|
0.0254,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -2148,12 +2213,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
-1,
|
|
||||||
0,
|
0,
|
||||||
|
1,
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
-1
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0,
|
0,
|
||||||
0.0127,
|
0.0127,
|
||||||
0.050800000000000005
|
0.050800000000000005
|
||||||
@ -2163,12 +2233,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
|
1,
|
||||||
0,
|
0,
|
||||||
0,
|
0
|
||||||
1
|
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
@ -2178,12 +2253,17 @@
|
|||||||
{
|
{
|
||||||
"type": "plane",
|
"type": "plane",
|
||||||
"plane": {
|
"plane": {
|
||||||
"normal": [
|
"xAxis": [
|
||||||
|
1,
|
||||||
0,
|
0,
|
||||||
0,
|
-0
|
||||||
1
|
|
||||||
],
|
],
|
||||||
"point": [
|
"yAxis": [
|
||||||
|
-0,
|
||||||
|
1,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"origin": [
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0.1016
|
0.1016
|
||||||
@ -2191,7 +2271,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"curves": [
|
"curves3D": [
|
||||||
{
|
{
|
||||||
"type": "line",
|
"type": "line",
|
||||||
"line": {
|
"line": {
|
||||||
|
|||||||
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
ISO-10303-21;
|
ISO-10303-21;
|
||||||
HEADER;
|
HEADER;
|
||||||
FILE_DESCRIPTION((('kittycad.io export')), '2;1');
|
FILE_DESCRIPTION((('zoo.dev export')), '2;1');
|
||||||
FILE_NAME('dump.step', '1970-01-01T00:00:00.0+00:00', ('Author unknown'), ('Organization unknown'), 'kittycad.io beta', 'kittycad.io', 'Authorization unknown');
|
FILE_NAME('dump.step', '1970-01-01T00:00:00.0+00:00', ('Author unknown'), ('Organization unknown'), 'zoo.dev beta', 'zoo.dev', 'Authorization unknown');
|
||||||
FILE_SCHEMA(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF'));
|
FILE_SCHEMA(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF'));
|
||||||
ENDSEC;
|
ENDSEC;
|
||||||
DATA;
|
DATA;
|
||||||
@ -384,23 +384,23 @@ DATA;
|
|||||||
#368 = ORIENTED_EDGE('NONE', *, *, #269, .T.);
|
#368 = ORIENTED_EDGE('NONE', *, *, #269, .T.);
|
||||||
#369 = EDGE_LOOP('NONE', (#355, #356, #357, #358, #359, #360, #361, #362, #363, #364, #365, #366, #367, #368));
|
#369 = EDGE_LOOP('NONE', (#355, #356, #357, #358, #359, #360, #361, #362, #363, #364, #365, #366, #367, #368));
|
||||||
#370 = CARTESIAN_POINT('NONE', (0, -0.0127, 0.0508));
|
#370 = CARTESIAN_POINT('NONE', (0, -0.0127, 0.0508));
|
||||||
#371 = DIRECTION('NONE', (-1, 0, -0));
|
#371 = DIRECTION('NONE', (-1, -0, 0));
|
||||||
#372 = AXIS2_PLACEMENT_3D('NONE', #370, #371, $);
|
#372 = AXIS2_PLACEMENT_3D('NONE', #370, #371, $);
|
||||||
#373 = PLANE('NONE', #372);
|
#373 = PLANE('NONE', #372);
|
||||||
#374 = CARTESIAN_POINT('NONE', (0.039306734695977924, -0.025399999999999995, 0.0508));
|
#374 = CARTESIAN_POINT('NONE', (0.039306734695977924, -0.025399999999999995, 0.0508));
|
||||||
#375 = DIRECTION('NONE', (0, -1, -0));
|
#375 = DIRECTION('NONE', (0, -1, 0));
|
||||||
#376 = AXIS2_PLACEMENT_3D('NONE', #374, #375, $);
|
#376 = AXIS2_PLACEMENT_3D('NONE', #374, #375, $);
|
||||||
#377 = PLANE('NONE', #376);
|
#377 = PLANE('NONE', #376);
|
||||||
#378 = CARTESIAN_POINT('NONE', (0.11488842876320533, -0.05079999999999996, 0.05079999999999999));
|
#378 = CARTESIAN_POINT('NONE', (0.11488842876320533, -0.05079999999999996, 0.05079999999999999));
|
||||||
#379 = DIRECTION('NONE', (-0.5735764363510459, -0.819152044288992, 0));
|
#379 = DIRECTION('NONE', (-0.5735764363510459, -0.8191520442889919, 0));
|
||||||
#380 = AXIS2_PLACEMENT_3D('NONE', #378, #379, $);
|
#380 = AXIS2_PLACEMENT_3D('NONE', #378, #379, $);
|
||||||
#381 = PLANE('NONE', #380);
|
#381 = PLANE('NONE', #380);
|
||||||
#382 = CARTESIAN_POINT('NONE', (0.19623169406722757, -0.07619999999999999, 0.0508));
|
#382 = CARTESIAN_POINT('NONE', (0.19623169406722757, -0.07619999999999999, 0.0508));
|
||||||
#383 = DIRECTION('NONE', (0, -1, -0));
|
#383 = DIRECTION('NONE', (0, -1, 0));
|
||||||
#384 = AXIS2_PLACEMENT_3D('NONE', #382, #383, $);
|
#384 = AXIS2_PLACEMENT_3D('NONE', #382, #383, $);
|
||||||
#385 = PLANE('NONE', #384);
|
#385 = PLANE('NONE', #384);
|
||||||
#386 = CARTESIAN_POINT('NONE', (0.2413, -0.06985, 0.0508));
|
#386 = CARTESIAN_POINT('NONE', (0.2413, -0.06985, 0.0508));
|
||||||
#387 = DIRECTION('NONE', (1, 0, -0));
|
#387 = DIRECTION('NONE', (1, -0, 0));
|
||||||
#388 = AXIS2_PLACEMENT_3D('NONE', #386, #387, $);
|
#388 = AXIS2_PLACEMENT_3D('NONE', #386, #387, $);
|
||||||
#389 = PLANE('NONE', #388);
|
#389 = PLANE('NONE', #388);
|
||||||
#390 = CARTESIAN_POINT('NONE', (0.19823384137660915, -0.0635, 0.0508));
|
#390 = CARTESIAN_POINT('NONE', (0.19823384137660915, -0.0635, 0.0508));
|
||||||
@ -408,19 +408,19 @@ DATA;
|
|||||||
#392 = AXIS2_PLACEMENT_3D('NONE', #390, #391, $);
|
#392 = AXIS2_PLACEMENT_3D('NONE', #390, #391, $);
|
||||||
#393 = PLANE('NONE', #392);
|
#393 = PLANE('NONE', #392);
|
||||||
#394 = CARTESIAN_POINT('NONE', (0.10982398353915601, -0.03174999999999997, 0.0508));
|
#394 = CARTESIAN_POINT('NONE', (0.10982398353915601, -0.03174999999999997, 0.0508));
|
||||||
#395 = DIRECTION('NONE', (0.573576436351046, 0.8191520442889918, -0));
|
#395 = DIRECTION('NONE', (0.5735764363510459, 0.8191520442889917, -0));
|
||||||
#396 = AXIS2_PLACEMENT_3D('NONE', #394, #395, $);
|
#396 = AXIS2_PLACEMENT_3D('NONE', #394, #395, $);
|
||||||
#397 = PLANE('NONE', #396);
|
#397 = PLANE('NONE', #396);
|
||||||
#398 = CARTESIAN_POINT('NONE', (0.105333141160801, 0.019049999999999987, 0.0508));
|
#398 = CARTESIAN_POINT('NONE', (0.105333141160801, 0.019049999999999987, 0.0508));
|
||||||
#399 = DIRECTION('NONE', (0.4226182617406993, -0.90630778703665, -0));
|
#399 = DIRECTION('NONE', (0.4226182617406993, -0.90630778703665, 0));
|
||||||
#400 = AXIS2_PLACEMENT_3D('NONE', #398, #399, $);
|
#400 = AXIS2_PLACEMENT_3D('NONE', #398, #399, $);
|
||||||
#401 = PLANE('NONE', #400);
|
#401 = PLANE('NONE', #400);
|
||||||
#402 = CARTESIAN_POINT('NONE', (0.19374299899825406, 0.0381, 0.0508));
|
#402 = CARTESIAN_POINT('NONE', (0.19374299899825406, 0.0381, 0.0508));
|
||||||
#403 = DIRECTION('NONE', (0, -1, -0));
|
#403 = DIRECTION('NONE', (0, -1, 0));
|
||||||
#404 = AXIS2_PLACEMENT_3D('NONE', #402, #403, $);
|
#404 = AXIS2_PLACEMENT_3D('NONE', #402, #403, $);
|
||||||
#405 = PLANE('NONE', #404);
|
#405 = PLANE('NONE', #404);
|
||||||
#406 = CARTESIAN_POINT('NONE', (0.2413, 0.044449999999999996, 0.0508));
|
#406 = CARTESIAN_POINT('NONE', (0.2413, 0.044449999999999996, 0.0508));
|
||||||
#407 = DIRECTION('NONE', (1, 0, -0));
|
#407 = DIRECTION('NONE', (1, -0, 0));
|
||||||
#408 = AXIS2_PLACEMENT_3D('NONE', #406, #407, $);
|
#408 = AXIS2_PLACEMENT_3D('NONE', #406, #407, $);
|
||||||
#409 = PLANE('NONE', #408);
|
#409 = PLANE('NONE', #408);
|
||||||
#410 = CARTESIAN_POINT('NONE', (0.19233523789047138, 0.0508, 0.0508));
|
#410 = CARTESIAN_POINT('NONE', (0.19233523789047138, 0.0508, 0.0508));
|
||||||
@ -436,7 +436,7 @@ DATA;
|
|||||||
#420 = AXIS2_PLACEMENT_3D('NONE', #418, #419, $);
|
#420 = AXIS2_PLACEMENT_3D('NONE', #418, #419, $);
|
||||||
#421 = PLANE('NONE', #420);
|
#421 = PLANE('NONE', #420);
|
||||||
#422 = CARTESIAN_POINT('NONE', (0, 0.0127, 0.0508));
|
#422 = CARTESIAN_POINT('NONE', (0, 0.0127, 0.0508));
|
||||||
#423 = DIRECTION('NONE', (-1, 0, -0));
|
#423 = DIRECTION('NONE', (-1, -0, 0));
|
||||||
#424 = AXIS2_PLACEMENT_3D('NONE', #422, #423, $);
|
#424 = AXIS2_PLACEMENT_3D('NONE', #422, #423, $);
|
||||||
#425 = PLANE('NONE', #424);
|
#425 = PLANE('NONE', #424);
|
||||||
#426 = CARTESIAN_POINT('NONE', (0, 0, -0));
|
#426 = CARTESIAN_POINT('NONE', (0, 0, -0));
|
||||||
@ -475,7 +475,7 @@ DATA;
|
|||||||
#459 = ADVANCED_FACE('NONE', (#458), #421, .T.);
|
#459 = ADVANCED_FACE('NONE', (#458), #421, .T.);
|
||||||
#460 = FACE_OUTER_BOUND('NONE', #339, .T.);
|
#460 = FACE_OUTER_BOUND('NONE', #339, .T.);
|
||||||
#461 = ADVANCED_FACE('NONE', (#460), #425, .T.);
|
#461 = ADVANCED_FACE('NONE', (#460), #425, .T.);
|
||||||
#462 = FACE_OUTER_BOUND('NONE', #354, .T.);
|
#462 = FACE_OUTER_BOUND('NONE', #354, .F.);
|
||||||
#463 = ADVANCED_FACE('NONE', (#462), #429, .F.);
|
#463 = ADVANCED_FACE('NONE', (#462), #429, .F.);
|
||||||
#464 = FACE_OUTER_BOUND('NONE', #369, .T.);
|
#464 = FACE_OUTER_BOUND('NONE', #369, .T.);
|
||||||
#465 = ADVANCED_FACE('NONE', (#464), #433, .T.);
|
#465 = ADVANCED_FACE('NONE', (#464), #433, .T.);
|
||||||
|
|||||||
@ -100,15 +100,15 @@ endfacet
|
|||||||
facet normal 0.57357645 0 0.819152
|
facet normal 0.57357645 0 0.819152
|
||||||
outer loop
|
outer loop
|
||||||
vertex 3.4311862 -0 -0.625
|
vertex 3.4311862 -0 -0.625
|
||||||
vertex 2.5385938 -0 0
|
|
||||||
vertex 2.5385938 -4 0
|
vertex 2.5385938 -4 0
|
||||||
|
vertex 3.4311862 -4 -0.625
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0.57357645 -0 0.819152
|
facet normal 0.5735763 0 0.8191522
|
||||||
outer loop
|
outer loop
|
||||||
vertex 3.4311862 -4 -0.625
|
vertex 4.323779 -0 -1.25
|
||||||
vertex 3.4311862 -0 -0.625
|
vertex 3.4311862 -0 -0.625
|
||||||
vertex 2.5385938 -4 0
|
vertex 3.4311862 -4 -0.625
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0.57357645 -0 0.819152
|
facet normal 0.57357645 -0 0.819152
|
||||||
@ -118,11 +118,11 @@ facet normal 0.57357645 -0 0.819152
|
|||||||
vertex 4.323779 -0 -1.25
|
vertex 4.323779 -0 -1.25
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0.5735763 0 0.8191522
|
facet normal 0.57357645 -0 0.819152
|
||||||
outer loop
|
outer loop
|
||||||
|
vertex 2.5385938 -4 0
|
||||||
vertex 3.4311862 -0 -0.625
|
vertex 3.4311862 -0 -0.625
|
||||||
vertex 3.4311862 -4 -0.625
|
vertex 2.5385938 -0 0
|
||||||
vertex 4.323779 -0 -1.25
|
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0.42261824 0 -0.9063078
|
facet normal 0.42261824 0 -0.9063078
|
||||||
@ -142,29 +142,29 @@ endfacet
|
|||||||
facet normal 0.42261824 0 -0.9063078
|
facet normal 0.42261824 0 -0.9063078
|
||||||
outer loop
|
outer loop
|
||||||
vertex 3.342784 -0 0.375
|
vertex 3.342784 -0 0.375
|
||||||
vertex 4.146974 -0 0.75
|
vertex 3.342784 -4 0.375
|
||||||
vertex 4.146974 -4 0.75
|
vertex 2.5385938 -0 0
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0.42261833 0 -0.90630776
|
facet normal 0.42261833 0 -0.90630776
|
||||||
outer loop
|
outer loop
|
||||||
vertex 4.146974 -0 0.75
|
vertex 4.146974 -0 0.75
|
||||||
vertex 5.755354 -0 1.5
|
|
||||||
vertex 5.755354 -4 1.5
|
vertex 5.755354 -4 1.5
|
||||||
|
vertex 4.146974 -4 0.75
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0.42261824 0 -0.9063078
|
facet normal 0.42261824 0 -0.9063078
|
||||||
outer loop
|
outer loop
|
||||||
vertex 3.342784 -4 0.375
|
vertex 4.146974 -4 0.75
|
||||||
vertex 2.5385938 -0 0
|
|
||||||
vertex 3.342784 -0 0.375
|
vertex 3.342784 -0 0.375
|
||||||
|
vertex 4.146974 -0 0.75
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0.42261833 0 -0.90630776
|
facet normal 0.42261833 0 -0.90630776
|
||||||
outer loop
|
outer loop
|
||||||
vertex 5.755354 -4 1.5
|
vertex 5.755354 -4 1.5
|
||||||
vertex 4.146974 -4 0.75
|
|
||||||
vertex 4.146974 -0 0.75
|
vertex 4.146974 -0 0.75
|
||||||
|
vertex 5.755354 -0 1.5
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0 0 -1
|
facet normal 0 0 -1
|
||||||
@ -258,6 +258,13 @@ facet normal 0 1 -0
|
|||||||
vertex 3.5 -0 1
|
vertex 3.5 -0 1
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
|
facet normal 0 1 0
|
||||||
|
outer loop
|
||||||
|
vertex 4.146974 -0 0.75
|
||||||
|
vertex 3.342784 -0 0.375
|
||||||
|
vertex 3.5 -0 1
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
facet normal 0 1 0
|
facet normal 0 1 0
|
||||||
outer loop
|
outer loop
|
||||||
vertex 3.4311862 -0 -0.625
|
vertex 3.4311862 -0 -0.625
|
||||||
@ -265,11 +272,53 @@ facet normal 0 1 0
|
|||||||
vertex 3.0950184 -0 -1
|
vertex 3.0950184 -0 -1
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
|
facet normal 0 0.99999994 0
|
||||||
|
outer loop
|
||||||
|
vertex 4.146974 -0 0.75
|
||||||
|
vertex 5.644507 -0 2
|
||||||
|
vertex 5.755354 -0 1.5
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal -0 1 0
|
||||||
|
outer loop
|
||||||
|
vertex 0 -0 1
|
||||||
|
vertex 3.5 -0 1
|
||||||
|
vertex 2.5385938 -0 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
facet normal 0 1 0
|
facet normal 0 1 0
|
||||||
outer loop
|
outer loop
|
||||||
vertex 3.342784 -0 0.375
|
vertex 0 -0 1
|
||||||
vertex 3.5 -0 1
|
vertex 2.5385938 -0 0
|
||||||
|
vertex 0 -0 0
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal -0 1 0
|
||||||
|
outer loop
|
||||||
|
vertex 5.644507 -0 2
|
||||||
|
vertex 9.5 -0 2
|
||||||
|
vertex 5.755354 -0 1.5
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 1 0
|
||||||
|
outer loop
|
||||||
|
vertex 9.5 -0 2
|
||||||
|
vertex 9.5 -0 1.5
|
||||||
|
vertex 5.755354 -0 1.5
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 1 -0
|
||||||
|
outer loop
|
||||||
vertex 4.146974 -0 0.75
|
vertex 4.146974 -0 0.75
|
||||||
|
vertex 3.5 -0 1
|
||||||
|
vertex 5.644507 -0 2
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0.99999994 0
|
||||||
|
outer loop
|
||||||
|
vertex 2.5385938 -0 0
|
||||||
|
vertex 3.4311862 -0 -0.625
|
||||||
|
vertex 3.0950184 -0 -1
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0 0.99999994 0
|
facet normal 0 0.99999994 0
|
||||||
@ -281,86 +330,37 @@ facet normal 0 0.99999994 0
|
|||||||
endfacet
|
endfacet
|
||||||
facet normal 0 1 0
|
facet normal 0 1 0
|
||||||
outer loop
|
outer loop
|
||||||
vertex 0 -0 -1
|
|
||||||
vertex 2.5385938 -0 0
|
|
||||||
vertex 3.0950184 -0 -1
|
|
||||||
endloop
|
|
||||||
endfacet
|
|
||||||
facet normal 0 1 0
|
|
||||||
outer loop
|
|
||||||
vertex 0 -0 -1
|
|
||||||
vertex 0 -0 0
|
|
||||||
vertex 2.5385938 -0 0
|
|
||||||
endloop
|
|
||||||
endfacet
|
|
||||||
facet normal 0 0.99999994 -0
|
|
||||||
outer loop
|
|
||||||
vertex 9.5 -0 -3
|
|
||||||
vertex 6.108964 -0 -2.5
|
vertex 6.108964 -0 -2.5
|
||||||
vertex 9.5 -0 -2.5
|
|
||||||
endloop
|
|
||||||
endfacet
|
|
||||||
facet normal 0 1 0
|
|
||||||
outer loop
|
|
||||||
vertex 9.5 -0 -3
|
|
||||||
vertex 5.9513144 -0 -3
|
|
||||||
vertex 6.108964 -0 -2.5
|
|
||||||
endloop
|
|
||||||
endfacet
|
|
||||||
facet normal 0 1 -0
|
|
||||||
outer loop
|
|
||||||
vertex 5.9513144 -0 -3
|
vertex 5.9513144 -0 -3
|
||||||
vertex 4.323779 -0 -1.25
|
vertex 4.323779 -0 -1.25
|
||||||
|
endloop
|
||||||
|
endfacet
|
||||||
|
facet normal 0 0.99999994 0
|
||||||
|
outer loop
|
||||||
|
vertex 9.5 -0 -2.5
|
||||||
|
vertex 9.5 -0 -3
|
||||||
vertex 6.108964 -0 -2.5
|
vertex 6.108964 -0 -2.5
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0 1 0
|
facet normal 0 1 0
|
||||||
outer loop
|
outer loop
|
||||||
vertex 5.644507 -0 2
|
vertex 6.108964 -0 -2.5
|
||||||
vertex 5.755354 -0 1.5
|
vertex 9.5 -0 -3
|
||||||
vertex 4.146974 -0 0.75
|
vertex 5.9513144 -0 -3
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0 0.99999994 -0
|
facet normal 0 1 0
|
||||||
outer loop
|
outer loop
|
||||||
|
vertex 2.5385938 -0 0
|
||||||
vertex 3.0950184 -0 -1
|
vertex 3.0950184 -0 -1
|
||||||
vertex 2.5385938 -0 0
|
vertex 0 -0 -1
|
||||||
vertex 3.4311862 -0 -0.625
|
|
||||||
endloop
|
|
||||||
endfacet
|
|
||||||
facet normal 0 1 -0
|
|
||||||
outer loop
|
|
||||||
vertex 4.146974 -0 0.75
|
|
||||||
vertex 3.5 -0 1
|
|
||||||
vertex 5.644507 -0 2
|
|
||||||
endloop
|
|
||||||
endfacet
|
|
||||||
facet normal 0 1 -0
|
|
||||||
outer loop
|
|
||||||
vertex 9.5 -0 1.5
|
|
||||||
vertex 5.755354 -0 1.5
|
|
||||||
vertex 9.5 -0 2
|
|
||||||
endloop
|
|
||||||
endfacet
|
|
||||||
facet normal 0 1 -0
|
|
||||||
outer loop
|
|
||||||
vertex 5.755354 -0 1.5
|
|
||||||
vertex 5.644507 -0 2
|
|
||||||
vertex 9.5 -0 2
|
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal 0 1 0
|
facet normal 0 1 0
|
||||||
outer loop
|
outer loop
|
||||||
vertex 2.5385938 -0 0
|
vertex 0 -0 -1
|
||||||
vertex 0 -0 0
|
vertex 0 -0 0
|
||||||
vertex 0 -0 1
|
|
||||||
endloop
|
|
||||||
endfacet
|
|
||||||
facet normal 0 1 0
|
|
||||||
outer loop
|
|
||||||
vertex 3.5 -0 1
|
|
||||||
vertex 2.5385938 -0 0
|
vertex 2.5385938 -0 0
|
||||||
vertex 0 -0 1
|
|
||||||
endloop
|
endloop
|
||||||
endfacet
|
endfacet
|
||||||
facet normal -0 -1 0
|
facet normal -0 -1 0
|
||||||
|
|||||||
Binary file not shown.
65
src/wasm-lib/Cargo.lock
generated
65
src/wasm-lib/Cargo.lock
generated
@ -1431,6 +1431,7 @@ dependencies = [
|
|||||||
"kittycad-execution-plan-traits",
|
"kittycad-execution-plan-traits",
|
||||||
"kittycad-modeling-session",
|
"kittycad-modeling-session",
|
||||||
"pretty_assertions",
|
"pretty_assertions",
|
||||||
|
"serde_json",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
@ -1458,7 +1459,7 @@ dependencies = [
|
|||||||
"futures-sink",
|
"futures-sink",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"http 0.2.9",
|
"http 0.2.9",
|
||||||
"indexmap 2.0.2",
|
"indexmap 2.2.2",
|
||||||
"slab",
|
"slab",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
@ -1718,9 +1719,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indexmap"
|
name = "indexmap"
|
||||||
version = "2.0.2"
|
version = "2.2.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
|
checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"equivalent",
|
"equivalent",
|
||||||
"hashbrown 0.14.2",
|
"hashbrown 0.14.2",
|
||||||
@ -1877,7 +1878,7 @@ dependencies = [
|
|||||||
"itertools 0.12.0",
|
"itertools 0.12.0",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"kittycad",
|
"kittycad",
|
||||||
"kittycad-execution-plan-macros 0.1.2 (git+https://github.com/KittyCAD/modeling-api?branch=main)",
|
"kittycad-execution-plan-macros 0.1.4 (git+https://github.com/KittyCAD/modeling-api?branch=main)",
|
||||||
"kittycad-execution-plan-traits",
|
"kittycad-execution-plan-traits",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"parse-display",
|
"parse-display",
|
||||||
@ -1950,7 +1951,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "kittycad-execution-plan"
|
name = "kittycad-execution-plan"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/KittyCAD/modeling-api?branch=main#0d1fb31b8624abea0d270365cc459e78577d26f8"
|
source = "git+https://github.com/KittyCAD/modeling-api?branch=main#186ea7c04d0a6f0f57220c2134cf3d9be10d6cbe"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"insta",
|
"insta",
|
||||||
@ -1968,9 +1969,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kittycad-execution-plan-macros"
|
name = "kittycad-execution-plan-macros"
|
||||||
version = "0.1.2"
|
version = "0.1.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "03e86c3ddefd89be816db24186c3e2fbd427675198f4d64b6d244dd2c1a3bae3"
|
checksum = "71d31b689c944d00aadda2ef83d8422a6efff97e1be5654a61f9d95496f0c19e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -1979,8 +1980,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kittycad-execution-plan-macros"
|
name = "kittycad-execution-plan-macros"
|
||||||
version = "0.1.2"
|
version = "0.1.4"
|
||||||
source = "git+https://github.com/KittyCAD/modeling-api?branch=main#0d1fb31b8624abea0d270365cc459e78577d26f8"
|
source = "git+https://github.com/KittyCAD/modeling-api?branch=main#186ea7c04d0a6f0f57220c2134cf3d9be10d6cbe"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -1989,9 +1990,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kittycad-execution-plan-traits"
|
name = "kittycad-execution-plan-traits"
|
||||||
version = "0.1.6"
|
version = "0.1.10"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d6f893f7837d95bb669781581842511307e42622221c6d241031f1c35c11a2af"
|
checksum = "a3ec8efd57b59697eb140b63c0ffe7db44fdfe5a55f14e45513411eba2280ba5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
@ -2000,8 +2001,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kittycad-modeling-cmds"
|
name = "kittycad-modeling-cmds"
|
||||||
version = "0.1.12"
|
version = "0.1.14"
|
||||||
source = "git+https://github.com/KittyCAD/modeling-api?branch=main#0d1fb31b8624abea0d270365cc459e78577d26f8"
|
source = "git+https://github.com/KittyCAD/modeling-api?branch=main#186ea7c04d0a6f0f57220c2134cf3d9be10d6cbe"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"chrono",
|
"chrono",
|
||||||
@ -2011,7 +2012,7 @@ dependencies = [
|
|||||||
"enum-iterator-derive",
|
"enum-iterator-derive",
|
||||||
"euler",
|
"euler",
|
||||||
"http 0.2.9",
|
"http 0.2.9",
|
||||||
"kittycad-execution-plan-macros 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"kittycad-execution-plan-macros 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"kittycad-execution-plan-traits",
|
"kittycad-execution-plan-traits",
|
||||||
"kittycad-unit-conversion-derive",
|
"kittycad-unit-conversion-derive",
|
||||||
"measurements",
|
"measurements",
|
||||||
@ -2028,7 +2029,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "kittycad-modeling-session"
|
name = "kittycad-modeling-session"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/KittyCAD/modeling-api?branch=main#0d1fb31b8624abea0d270365cc459e78577d26f8"
|
source = "git+https://github.com/KittyCAD/modeling-api?branch=main#186ea7c04d0a6f0f57220c2134cf3d9be10d6cbe"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures",
|
"futures",
|
||||||
"kittycad",
|
"kittycad",
|
||||||
@ -2408,7 +2409,7 @@ dependencies = [
|
|||||||
"format_serde_error",
|
"format_serde_error",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"http 0.2.9",
|
"http 0.2.9",
|
||||||
"indexmap 2.0.2",
|
"indexmap 2.2.2",
|
||||||
"json-patch",
|
"json-patch",
|
||||||
"log",
|
"log",
|
||||||
"numeral",
|
"numeral",
|
||||||
@ -2443,7 +2444,7 @@ version = "1.0.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "75e56d5c441965b6425165b7e3223cc933ca469834f4a8b4786817a1f9dc4f13"
|
checksum = "75e56d5c441965b6425165b7e3223cc933ca469834f4a8b4786817a1f9dc4f13"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.0.2",
|
"indexmap 2.2.2",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
]
|
]
|
||||||
@ -2537,9 +2538,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "papergrid"
|
name = "papergrid"
|
||||||
version = "0.10.0"
|
version = "0.11.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a2ccbe15f2b6db62f9a9871642746427e297b0ceb85f9a7f1ee5ff47d184d0c8"
|
checksum = "9ad43c07024ef767f9160710b3a6773976194758c7919b17e63b863db0bdf7fb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytecount",
|
"bytecount",
|
||||||
"fnv",
|
"fnv",
|
||||||
@ -3472,9 +3473,9 @@ checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.193"
|
version = "1.0.196"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
|
checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
@ -3490,9 +3491,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.193"
|
version = "1.0.196"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
|
checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -3512,11 +3513,11 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.108"
|
version = "1.0.113"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
|
checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.0.2",
|
"indexmap 2.2.2",
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
"serde",
|
"serde",
|
||||||
@ -3584,7 +3585,7 @@ version = "0.9.25"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574"
|
checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.0.2",
|
"indexmap 2.2.2",
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
"serde",
|
"serde",
|
||||||
@ -3941,9 +3942,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tabled"
|
name = "tabled"
|
||||||
version = "0.14.0"
|
version = "0.15.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dfe9c3632da101aba5131ed63f9eed38665f8b3c68703a6bb18124835c1a5d22"
|
checksum = "4c998b0c8b921495196a48aabaf1901ff28be0760136e31604f7967b0792050e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"papergrid",
|
"papergrid",
|
||||||
"tabled_derive",
|
"tabled_derive",
|
||||||
@ -3952,9 +3953,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tabled_derive"
|
name = "tabled_derive"
|
||||||
version = "0.6.0"
|
version = "0.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "99f688a08b54f4f02f0a3c382aefdb7884d3d69609f785bd253dc033243e3fe4"
|
checksum = "4c138f99377e5d653a371cdad263615634cfc8467685dfe8e73e2b8e98f44b17"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck",
|
"heck",
|
||||||
"proc-macro-error",
|
"proc-macro-error",
|
||||||
@ -4242,7 +4243,7 @@ version = "0.20.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "380f9e8120405471f7c9ad1860a713ef5ece6a670c7eae39225e477340f32fc4"
|
checksum = "380f9e8120405471f7c9ad1860a713ef5ece6a670c7eae39225e477340f32fc4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.0.2",
|
"indexmap 2.2.2",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_spanned",
|
"serde_spanned",
|
||||||
"toml_datetime",
|
"toml_datetime",
|
||||||
|
|||||||
@ -60,7 +60,7 @@ members = [
|
|||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
kittycad = { version = "0.2.45", default-features = false, features = ["js"] }
|
kittycad = { version = "0.2.45", default-features = false, features = ["js"] }
|
||||||
kittycad-execution-plan = { git = "https://github.com/KittyCAD/modeling-api", branch = "main" }
|
kittycad-execution-plan = { git = "https://github.com/KittyCAD/modeling-api", branch = "main" }
|
||||||
kittycad-execution-plan-traits = "0.1.6"
|
kittycad-execution-plan-traits = "0.1.10"
|
||||||
kittycad-modeling-session = { git = "https://github.com/KittyCAD/modeling-api", branch = "main" }
|
kittycad-modeling-session = { git = "https://github.com/KittyCAD/modeling-api", branch = "main" }
|
||||||
kittycad-execution-plan-macros = { git = "https://github.com/KittyCAD/modeling-api", branch = "main" }
|
kittycad-execution-plan-macros = { git = "https://github.com/KittyCAD/modeling-api", branch = "main" }
|
||||||
|
|
||||||
|
|||||||
@ -17,3 +17,4 @@ tokio = { version = "1.35.1", features = ["macros", "rt"] }
|
|||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
pretty_assertions = "1"
|
pretty_assertions = "1"
|
||||||
|
serde_json = "1.0.113"
|
||||||
|
|||||||
@ -12,9 +12,9 @@ use kcl_lib::{
|
|||||||
ast::types::{BodyItem, FunctionExpressionParts, KclNone, LiteralValue, Program},
|
ast::types::{BodyItem, FunctionExpressionParts, KclNone, LiteralValue, Program},
|
||||||
};
|
};
|
||||||
use kcl_value_group::into_single_value;
|
use kcl_value_group::into_single_value;
|
||||||
use kittycad_execution_plan::{self as ep, Address, Destination, Instruction};
|
use kittycad_execution_plan::{self as ep, Destination, Instruction};
|
||||||
use kittycad_execution_plan_traits as ept;
|
use kittycad_execution_plan_traits as ept;
|
||||||
use kittycad_execution_plan_traits::NumericPrimitive;
|
use kittycad_execution_plan_traits::{Address, NumericPrimitive};
|
||||||
use kittycad_modeling_session::Session;
|
use kittycad_modeling_session::Session;
|
||||||
|
|
||||||
use self::binding_scope::{BindingScope, EpBinding, GetFnResult};
|
use self::binding_scope::{BindingScope, EpBinding, GetFnResult};
|
||||||
@ -323,32 +323,27 @@ impl Planner {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let (properties, id) = parse();
|
let (mut properties, id) = parse();
|
||||||
let name = id.name;
|
let name = id.name;
|
||||||
let mut binding = self.binding_scope.get(&name).ok_or(CompileError::Undefined { name })?;
|
let mut binding = self.binding_scope.get(&name).ok_or(CompileError::Undefined { name })?;
|
||||||
if properties.iter().any(|(_property, computed)| *computed) {
|
if properties.iter().any(|(_property, computed)| *computed) {
|
||||||
// There's a computed property, so the property/index can only be determined at runtime.
|
// There's a computed property, so the property/index can only be determined at runtime.
|
||||||
let mut instructions: Vec<Instruction> = Vec::new();
|
let mut instructions: Vec<Instruction> = Vec::new();
|
||||||
// For now we can only handle computed properties of arrays and objects, no other type.
|
let starting_address = match binding {
|
||||||
enum ValType {
|
EpBinding::Sequence { length_at, elements: _ } => *length_at,
|
||||||
Array,
|
|
||||||
Object,
|
|
||||||
}
|
|
||||||
// TODO: `val_type` might need to be mutable so we can properly process
|
|
||||||
// arrays within objects within arrays etc.
|
|
||||||
let (val_type, mut val_start) = match binding {
|
|
||||||
EpBinding::Sequence { length_at, elements: _ } => (ValType::Array, *length_at),
|
|
||||||
EpBinding::Map {
|
EpBinding::Map {
|
||||||
length_at,
|
length_at,
|
||||||
properties: _,
|
properties: _,
|
||||||
} => (ValType::Object, *length_at),
|
} => *length_at,
|
||||||
_ => todo!("handle computed properties besides arrays"),
|
_ => return Err(CompileError::CannotIndex),
|
||||||
};
|
};
|
||||||
|
let mut structure_start = ep::Operand::Literal(starting_address.into());
|
||||||
|
properties.reverse();
|
||||||
for (property, _computed) in properties {
|
for (property, _computed) in properties {
|
||||||
// Where is the index stored?
|
// Where is the member stored?
|
||||||
let index = match property {
|
let addr_of_member = match property {
|
||||||
// If it's some identifier, then look up where that identifier will be stored.
|
// If it's some identifier, then look up where that identifier will be stored.
|
||||||
// That's the memory address the index should be in.
|
// That's the memory address the index/property should be in.
|
||||||
ast::types::LiteralIdentifier::Identifier(id) => {
|
ast::types::LiteralIdentifier::Identifier(id) => {
|
||||||
let b = self
|
let b = self
|
||||||
.binding_scope
|
.binding_scope
|
||||||
@ -365,27 +360,28 @@ impl Planner {
|
|||||||
ep::Operand::Literal(kcl_literal_to_kcep_literal(litval.value))
|
ep::Operand::Literal(kcl_literal_to_kcep_literal(litval.value))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
instructions.push(match val_type {
|
|
||||||
ValType::Array => Instruction::GetElement {
|
// Find the address of the member, push to stack.
|
||||||
index,
|
instructions.push(Instruction::AddrOfMember {
|
||||||
start: val_start,
|
member: addr_of_member,
|
||||||
},
|
start: structure_start,
|
||||||
ValType::Object => Instruction::GetProperty {
|
});
|
||||||
start: val_start,
|
// If there's another member after this one, its starting object is the
|
||||||
property: index,
|
// address we just pushed to the stack.
|
||||||
},
|
structure_start = ep::Operand::StackPop;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The final address is on the stack.
|
||||||
|
// Move it to addressable memory.
|
||||||
|
let final_prop_addr = self.next_addr.offset_by(1);
|
||||||
|
instructions.push(Instruction::CopyLen {
|
||||||
|
source_range: ep::Operand::StackPop,
|
||||||
|
destination_range: ep::Operand::Literal(final_prop_addr.into()),
|
||||||
});
|
});
|
||||||
|
|
||||||
// Point `start_of_array` to the location we just indexed, so that if there's
|
|
||||||
// another index expression to a child array, `start_of_array` is in the right place.
|
|
||||||
val_start = self.next_addr.offset_by(1);
|
|
||||||
instructions.push(Instruction::StackPop {
|
|
||||||
destination: Some(val_start),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
Ok(EvalPlan {
|
Ok(EvalPlan {
|
||||||
instructions,
|
instructions,
|
||||||
binding: EpBinding::Single(val_start),
|
binding: EpBinding::Single(final_prop_addr),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
// Compiler optimization:
|
// Compiler optimization:
|
||||||
|
|||||||
@ -3,8 +3,8 @@
|
|||||||
//! But some other stdlib functions will be written in KCL.
|
//! But some other stdlib functions will be written in KCL.
|
||||||
|
|
||||||
use kcl_lib::std::sketch::PlaneData;
|
use kcl_lib::std::sketch::PlaneData;
|
||||||
use kittycad_execution_plan::{Address, BinaryArithmetic, Destination, Instruction};
|
use kittycad_execution_plan::{BinaryArithmetic, Destination, Instruction};
|
||||||
use kittycad_execution_plan_traits::Value;
|
use kittycad_execution_plan_traits::{Address, Value};
|
||||||
|
|
||||||
use crate::{CompileError, EpBinding, EvalPlan};
|
use crate::{CompileError, EpBinding, EvalPlan};
|
||||||
|
|
||||||
|
|||||||
@ -309,6 +309,71 @@ async fn computed_object_property() {
|
|||||||
assert_eq!(mem.get(address_of_val).unwrap(), &ept::Primitive::Bool(true));
|
assert_eq!(mem.get(address_of_val).unwrap(), &ept::Primitive::Bool(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn computed_array_in_object() {
|
||||||
|
let program = r#"
|
||||||
|
let complicated = {a: [{b: true}]}
|
||||||
|
let i = 0
|
||||||
|
let prop0 = "a"
|
||||||
|
let prop1 = "b"
|
||||||
|
let val = complicated[prop0][i][prop1] // should be `true`
|
||||||
|
"#;
|
||||||
|
let (_plan, scope) = must_plan(program);
|
||||||
|
let Some(EpBinding::Single(address_of_val)) = scope.get("val") else {
|
||||||
|
panic!("Unexpected binding for variable 'val': {:?}", scope.get("val"));
|
||||||
|
};
|
||||||
|
let ast = kcl_lib::parser::Parser::new(kcl_lib::token::lexer(program))
|
||||||
|
.ast()
|
||||||
|
.unwrap();
|
||||||
|
let mem = crate::execute(ast, None).await.unwrap();
|
||||||
|
use ept::ReadMemory;
|
||||||
|
// Should be 'true', based on the above KCL program.
|
||||||
|
assert_eq!(mem.get(address_of_val).unwrap(), &ept::Primitive::Bool(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn computed_object_in_array() {
|
||||||
|
let program = r#"
|
||||||
|
let complicated = [{a: {b: true}}]
|
||||||
|
let i = 0
|
||||||
|
let prop0 = "a"
|
||||||
|
let prop1 = "b"
|
||||||
|
let val = complicated[i][prop0][prop1] // should be `true`
|
||||||
|
"#;
|
||||||
|
let (_plan, scope) = must_plan(program);
|
||||||
|
let Some(EpBinding::Single(address_of_val)) = scope.get("val") else {
|
||||||
|
panic!("Unexpected binding for variable 'val': {:?}", scope.get("val"));
|
||||||
|
};
|
||||||
|
let ast = kcl_lib::parser::Parser::new(kcl_lib::token::lexer(program))
|
||||||
|
.ast()
|
||||||
|
.unwrap();
|
||||||
|
let mem = crate::execute(ast, None).await.unwrap();
|
||||||
|
use ept::ReadMemory;
|
||||||
|
// Should be 'true', based on the above KCL program.
|
||||||
|
assert_eq!(mem.get(address_of_val).unwrap(), &ept::Primitive::Bool(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn computed_nested_object_property() {
|
||||||
|
let program = r#"
|
||||||
|
let obj = {a: {b: true}}
|
||||||
|
let prop0 = "a"
|
||||||
|
let prop1 = "b"
|
||||||
|
let val = obj[prop0][prop1] // should be `true`
|
||||||
|
"#;
|
||||||
|
let (_plan, scope) = must_plan(program);
|
||||||
|
let Some(EpBinding::Single(address_of_val)) = scope.get("val") else {
|
||||||
|
panic!("Unexpected binding for variable 'val': {:?}", scope.get("val"));
|
||||||
|
};
|
||||||
|
let ast = kcl_lib::parser::Parser::new(kcl_lib::token::lexer(program))
|
||||||
|
.ast()
|
||||||
|
.unwrap();
|
||||||
|
let mem = crate::execute(ast, None).await.unwrap();
|
||||||
|
use ept::ReadMemory;
|
||||||
|
// Should be 'true', based on the above KCL program.
|
||||||
|
assert_eq!(mem.get(address_of_val).unwrap(), &ept::Primitive::Bool(true));
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn computed_array_index() {
|
async fn computed_array_index() {
|
||||||
let program = r#"
|
let program = r#"
|
||||||
@ -383,13 +448,14 @@ async fn computed_array_index() {
|
|||||||
destination: Destination::Address(Address::ZERO + 9)
|
destination: Destination::Address(Address::ZERO + 9)
|
||||||
},
|
},
|
||||||
// Get the element at the index
|
// Get the element at the index
|
||||||
Instruction::GetElement {
|
Instruction::AddrOfMember {
|
||||||
start: Address::ZERO,
|
start: ep::Operand::Literal(Address::ZERO.into()),
|
||||||
index: ep::Operand::Reference(Address::ZERO + 9)
|
member: ep::Operand::Reference(Address::ZERO + 9)
|
||||||
},
|
},
|
||||||
// Write it to the next free address.
|
// Write it to the next free address.
|
||||||
Instruction::StackPop {
|
Instruction::CopyLen {
|
||||||
destination: Some(expected_address_of_prop)
|
source_range: ep::Operand::StackPop,
|
||||||
|
destination_range: ep::Operand::Literal(expected_address_of_prop.into()),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
@ -406,25 +472,6 @@ async fn computed_array_index() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
#[ignore = "haven't done computed properties yet"]
|
|
||||||
fn computed_member_expressions() {
|
|
||||||
let program = r#"
|
|
||||||
let obj = {x: 1, y: 2}
|
|
||||||
let index = "x"
|
|
||||||
let prop = obj[index]
|
|
||||||
"#;
|
|
||||||
let (_plan, scope) = must_plan(program);
|
|
||||||
match scope.get("prop").unwrap() {
|
|
||||||
EpBinding::Single(addr) => {
|
|
||||||
assert_eq!(*addr, Address::ZERO + 1);
|
|
||||||
}
|
|
||||||
other => {
|
|
||||||
panic!("expected 'prop' bound to 0x0 but it was bound to {other:?}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn member_expressions_object() {
|
fn member_expressions_object() {
|
||||||
let program = r#"
|
let program = r#"
|
||||||
|
|||||||
@ -2721,7 +2721,7 @@ show(b1)
|
|||||||
show(b2)"#;
|
show(b2)"#;
|
||||||
let tokens = crate::token::lexer(some_program_string);
|
let tokens = crate::token::lexer(some_program_string);
|
||||||
let parser = crate::parser::Parser::new(tokens);
|
let parser = crate::parser::Parser::new(tokens);
|
||||||
dbg!(parser.ast().unwrap());
|
parser.ast().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user