diff --git a/compiler/packages/babel-plugin-react-compiler/src/HIR/Globals.ts b/compiler/packages/babel-plugin-react-compiler/src/HIR/Globals.ts index 5e90401c688..884372b986e 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/HIR/Globals.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/Globals.ts @@ -136,6 +136,57 @@ const TYPED_GLOBALS: Array<[string, BuiltInType]> = [ returnValueKind: ValueKind.Primitive, }), ], + [ + 'min', + // Math.min(value0, ..., valueN) + addFunction(DEFAULT_SHAPES, [], { + positionalParams: [], + restParam: Effect.Read, + returnType: {kind: 'Primitive'}, + calleeEffect: Effect.Read, + returnValueKind: ValueKind.Primitive, + }), + ], + [ + 'trunc', + addFunction(DEFAULT_SHAPES, [], { + positionalParams: [], + restParam: Effect.Read, + returnType: {kind: 'Primitive'}, + calleeEffect: Effect.Read, + returnValueKind: ValueKind.Primitive, + }), + ], + [ + 'ceil', + addFunction(DEFAULT_SHAPES, [], { + positionalParams: [], + restParam: Effect.Read, + returnType: {kind: 'Primitive'}, + calleeEffect: Effect.Read, + returnValueKind: ValueKind.Primitive, + }), + ], + [ + 'floor', + addFunction(DEFAULT_SHAPES, [], { + positionalParams: [], + restParam: Effect.Read, + returnType: {kind: 'Primitive'}, + calleeEffect: Effect.Read, + returnValueKind: ValueKind.Primitive, + }), + ], + [ + 'pow', + addFunction(DEFAULT_SHAPES, [], { + positionalParams: [], + restParam: Effect.Read, + returnType: {kind: 'Primitive'}, + calleeEffect: Effect.Read, + returnValueKind: ValueKind.Primitive, + }), + ], ]), ], ['Infinity', {kind: 'Primitive'}], @@ -455,11 +506,15 @@ for (const [name, type_] of TYPED_GLOBALS) { DEFAULT_GLOBALS.set(name, type_); } -// Recursive global type +// Recursive global types DEFAULT_GLOBALS.set( 'globalThis', addObject(DEFAULT_SHAPES, 'globalThis', TYPED_GLOBALS), ); +DEFAULT_GLOBALS.set( + 'global', + addObject(DEFAULT_SHAPES, 'global', TYPED_GLOBALS), +); export function installReAnimatedTypes( globals: GlobalRegistry, diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/console-readonly.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/console-readonly.expect.md index 6ca690ddf3e..29fd76e8363 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/console-readonly.expect.md +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/console-readonly.expect.md @@ -13,6 +13,7 @@ function Component(props) { console.error(x); console.trace(x); console.table(x); + global.console.log(x); return x; } @@ -48,6 +49,7 @@ function Component(props) { console.error(x); console.trace(x); console.table(x); + global.console.log(x); return x; } @@ -61,4 +63,4 @@ export const FIXTURE_ENTRYPOINT = { ### Eval output (kind: ok) {"a":1,"b":2} -logs: [{ a: 1, b: 2 },{ a: 1, b: 2 },{ a: 1, b: 2 },{ a: 1, b: 2 },{ a: 1, b: 2 }] \ No newline at end of file +logs: [{ a: 1, b: 2 },{ a: 1, b: 2 },{ a: 1, b: 2 },{ a: 1, b: 2 },{ a: 1, b: 2 },{ a: 1, b: 2 }] \ No newline at end of file diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/console-readonly.js b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/console-readonly.js index 673af84fad9..e611f40b944 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/console-readonly.js +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/console-readonly.js @@ -9,6 +9,7 @@ function Component(props) { console.error(x); console.trace(x); console.table(x); + global.console.log(x); return x; } diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/preserve-memo-validation/useMemo-infer-nonallocating.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/preserve-memo-validation/useMemo-infer-nonallocating.expect.md index 9b408a6af2a..22b5cc05bef 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/preserve-memo-validation/useMemo-infer-nonallocating.expect.md +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/preserve-memo-validation/useMemo-infer-nonallocating.expect.md @@ -22,25 +22,15 @@ export const FIXTURE_ENTRYPOINT = { ## Code ```javascript -import { c as _c } from "react/compiler-runtime"; // @validatePreserveExistingMemoizationGuarantees +// @validatePreserveExistingMemoizationGuarantees import { useMemo } from "react"; // It's correct to infer a useMemo value is non-allocating // and not provide it with a reactive scope function useFoo(num1, num2) { - const $ = _c(3); let t0; - let t1; - if ($[0] !== num1 || $[1] !== num2) { - t1 = Math.min(num1, num2); - $[0] = num1; - $[1] = num2; - $[2] = t1; - } else { - t1 = $[2]; - } - t0 = t1; + t0 = Math.min(num1, num2); return t0; }