Compare commits
2 Commits
rewrite-va
...
pr33625
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6ef9e5bd49 | ||
|
|
440d8c2876 |
@@ -349,11 +349,9 @@ function codegenReactiveFunction(
|
|||||||
fn: ReactiveFunction,
|
fn: ReactiveFunction,
|
||||||
): Result<CodegenFunction, CompilerError> {
|
): Result<CodegenFunction, CompilerError> {
|
||||||
for (const param of fn.params) {
|
for (const param of fn.params) {
|
||||||
if (param.kind === 'Identifier') {
|
const place = param.kind === 'Identifier' ? param : param.place;
|
||||||
cx.temp.set(param.identifier.declarationId, null);
|
cx.temp.set(place.identifier.declarationId, null);
|
||||||
} else {
|
cx.declare(place.identifier);
|
||||||
cx.temp.set(param.place.identifier.declarationId, null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const params = fn.params.map(param => convertParameter(param));
|
const params = fn.params.map(param => convertParameter(param));
|
||||||
@@ -1183,7 +1181,7 @@ function codegenTerminal(
|
|||||||
? codegenPlaceToExpression(cx, case_.test)
|
? codegenPlaceToExpression(cx, case_.test)
|
||||||
: null;
|
: null;
|
||||||
const block = codegenBlock(cx, case_.block!);
|
const block = codegenBlock(cx, case_.block!);
|
||||||
return t.switchCase(test, [block]);
|
return t.switchCase(test, block.body.length === 0 ? [] : [block]);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,6 +79,10 @@ export function extractScopeDeclarationsFromDestructuring(
|
|||||||
fn: ReactiveFunction,
|
fn: ReactiveFunction,
|
||||||
): void {
|
): void {
|
||||||
const state = new State(fn.env);
|
const state = new State(fn.env);
|
||||||
|
for (const param of fn.params) {
|
||||||
|
const place = param.kind === 'Identifier' ? param : param.place;
|
||||||
|
state.declared.add(place.identifier.declarationId);
|
||||||
|
}
|
||||||
visitReactiveFunction(fn, new Visitor(), state);
|
visitReactiveFunction(fn, new Visitor(), state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,8 +50,7 @@ function Component(props) {
|
|||||||
console.log(handlers.value);
|
console.log(handlers.value);
|
||||||
break bb0;
|
break bb0;
|
||||||
}
|
}
|
||||||
default: {
|
default:
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
t0 = handlers;
|
t0 = handlers;
|
||||||
|
|||||||
@@ -67,8 +67,7 @@ function Component(props) {
|
|||||||
case "b": {
|
case "b": {
|
||||||
break bb1;
|
break bb1;
|
||||||
}
|
}
|
||||||
case "c": {
|
case "c":
|
||||||
}
|
|
||||||
default: {
|
default: {
|
||||||
x = 6;
|
x = 6;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
|
||||||
|
## Input
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
import {Stringify, useIdentity} from 'shared-runtime';
|
||||||
|
|
||||||
|
function Component({other, ...props}, ref) {
|
||||||
|
[props, ref] = useIdentity([props, ref]);
|
||||||
|
return <Stringify props={props} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const FIXTURE_ENTRYPOINT = {
|
||||||
|
fn: Component,
|
||||||
|
params: [{a: 0, b: 'hello', children: <div>Hello</div>}],
|
||||||
|
};
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Code
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
import { c as _c } from "react/compiler-runtime";
|
||||||
|
import { Stringify, useIdentity } from "shared-runtime";
|
||||||
|
|
||||||
|
function Component(t0, ref) {
|
||||||
|
const $ = _c(7);
|
||||||
|
let props;
|
||||||
|
if ($[0] !== t0) {
|
||||||
|
let { other, ...t1 } = t0;
|
||||||
|
props = t1;
|
||||||
|
$[0] = t0;
|
||||||
|
$[1] = props;
|
||||||
|
} else {
|
||||||
|
props = $[1];
|
||||||
|
}
|
||||||
|
let t1;
|
||||||
|
if ($[2] !== props || $[3] !== ref) {
|
||||||
|
t1 = [props, ref];
|
||||||
|
$[2] = props;
|
||||||
|
$[3] = ref;
|
||||||
|
$[4] = t1;
|
||||||
|
} else {
|
||||||
|
t1 = $[4];
|
||||||
|
}
|
||||||
|
[props, ref] = useIdentity(t1);
|
||||||
|
let t2;
|
||||||
|
if ($[5] !== props) {
|
||||||
|
t2 = <Stringify props={props} />;
|
||||||
|
$[5] = props;
|
||||||
|
$[6] = t2;
|
||||||
|
} else {
|
||||||
|
t2 = $[6];
|
||||||
|
}
|
||||||
|
return t2;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const FIXTURE_ENTRYPOINT = {
|
||||||
|
fn: Component,
|
||||||
|
params: [{ a: 0, b: "hello", children: <div>Hello</div> }],
|
||||||
|
};
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Eval output
|
||||||
|
(kind: ok) <div>{"props":{"a":0,"b":"hello","children":{"type":"div","key":null,"props":{"children":"Hello"},"_owner":"[[ cyclic ref *3 ]]","_store":{}}}}</div>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import {Stringify, useIdentity} from 'shared-runtime';
|
||||||
|
|
||||||
|
function Component({other, ...props}, ref) {
|
||||||
|
[props, ref] = useIdentity([props, ref]);
|
||||||
|
return <Stringify props={props} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const FIXTURE_ENTRYPOINT = {
|
||||||
|
fn: Component,
|
||||||
|
params: [{a: 0, b: 'hello', children: <div>Hello</div>}],
|
||||||
|
};
|
||||||
@@ -50,10 +50,8 @@ function Component(props) {
|
|||||||
case 1: {
|
case 1: {
|
||||||
break bb0;
|
break bb0;
|
||||||
}
|
}
|
||||||
case 2: {
|
case 2:
|
||||||
}
|
default:
|
||||||
default: {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (props.cond2) {
|
if (props.cond2) {
|
||||||
|
|||||||
@@ -41,8 +41,7 @@ function foo() {
|
|||||||
case 2: {
|
case 2: {
|
||||||
break bb0;
|
break bb0;
|
||||||
}
|
}
|
||||||
default: {
|
default:
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,22 +43,17 @@ export const FIXTURE_ENTRYPOINT = {
|
|||||||
```javascript
|
```javascript
|
||||||
function foo(x) {
|
function foo(x) {
|
||||||
bb0: switch (x) {
|
bb0: switch (x) {
|
||||||
case 0: {
|
case 0:
|
||||||
}
|
case 1:
|
||||||
case 1: {
|
|
||||||
}
|
|
||||||
case 2: {
|
case 2: {
|
||||||
break bb0;
|
break bb0;
|
||||||
}
|
}
|
||||||
case 3: {
|
case 3: {
|
||||||
break bb0;
|
break bb0;
|
||||||
}
|
}
|
||||||
case 4: {
|
case 4:
|
||||||
}
|
case 5:
|
||||||
case 5: {
|
default:
|
||||||
}
|
|
||||||
default: {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user