From 6faaec60b1b6748f393d47e330c5a7ea7568ddf1 Mon Sep 17 00:00:00 2001 From: George Kalpakas Date: Mon, 3 Feb 2020 17:56:26 +0200 Subject: [PATCH] refactor(compiler-cli): rename the `BuiltinFn` type to the more generic `KnownFn` (#35191) This is in preparation of using the `KnownFn` type for known TypeScript helpers (in addition to built-in functions/methods). This will in turn allow simplifying the detection of both imported and emitted TypeScript helpers. PR Close #35191 --- .../compiler-cli/src/ngtsc/partial_evaluator/index.ts | 2 +- .../src/ngtsc/partial_evaluator/src/builtin.ts | 8 ++++---- .../src/ngtsc/partial_evaluator/src/interpreter.ts | 4 ++-- .../src/ngtsc/partial_evaluator/src/result.ts | 8 +++++--- .../src/ngtsc/partial_evaluator/src/ts_helpers.ts | 4 ++-- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/compiler-cli/src/ngtsc/partial_evaluator/index.ts b/packages/compiler-cli/src/ngtsc/partial_evaluator/index.ts index f8465eba4e..39d157226e 100644 --- a/packages/compiler-cli/src/ngtsc/partial_evaluator/index.ts +++ b/packages/compiler-cli/src/ngtsc/partial_evaluator/index.ts @@ -8,4 +8,4 @@ export {DynamicValue} from './src/dynamic'; export {ForeignFunctionResolver, PartialEvaluator} from './src/interface'; -export {BuiltinFn, EnumValue, ResolvedValue, ResolvedValueArray, ResolvedValueMap} from './src/result'; +export {EnumValue, KnownFn, ResolvedValue, ResolvedValueArray, ResolvedValueMap} from './src/result'; diff --git a/packages/compiler-cli/src/ngtsc/partial_evaluator/src/builtin.ts b/packages/compiler-cli/src/ngtsc/partial_evaluator/src/builtin.ts index 36636f7919..b8f4e6b8ac 100644 --- a/packages/compiler-cli/src/ngtsc/partial_evaluator/src/builtin.ts +++ b/packages/compiler-cli/src/ngtsc/partial_evaluator/src/builtin.ts @@ -9,9 +9,9 @@ import * as ts from 'typescript'; import {DynamicValue} from './dynamic'; -import {BuiltinFn, ResolvedValue, ResolvedValueArray} from './result'; +import {KnownFn, ResolvedValue, ResolvedValueArray} from './result'; -export class ArraySliceBuiltinFn extends BuiltinFn { +export class ArraySliceBuiltinFn extends KnownFn { constructor(private lhs: ResolvedValueArray) { super(); } evaluate(node: ts.CallExpression, args: ResolvedValueArray): ResolvedValue { @@ -23,7 +23,7 @@ export class ArraySliceBuiltinFn extends BuiltinFn { } } -export class ArrayConcatBuiltinFn extends BuiltinFn { +export class ArrayConcatBuiltinFn extends KnownFn { constructor(private lhs: ResolvedValueArray) { super(); } evaluate(node: ts.CallExpression, args: ResolvedValueArray): ResolvedValue { @@ -41,7 +41,7 @@ export class ArrayConcatBuiltinFn extends BuiltinFn { } } -export class ObjectAssignBuiltinFn extends BuiltinFn { +export class ObjectAssignBuiltinFn extends KnownFn { evaluate(node: ts.CallExpression, args: ResolvedValueArray): ResolvedValue { if (args.length === 0) { return DynamicValue.fromUnsupportedSyntax(node); diff --git a/packages/compiler-cli/src/ngtsc/partial_evaluator/src/interpreter.ts b/packages/compiler-cli/src/ngtsc/partial_evaluator/src/interpreter.ts index 21e3e04985..198a5f93fa 100644 --- a/packages/compiler-cli/src/ngtsc/partial_evaluator/src/interpreter.ts +++ b/packages/compiler-cli/src/ngtsc/partial_evaluator/src/interpreter.ts @@ -18,7 +18,7 @@ import {ArrayConcatBuiltinFn, ArraySliceBuiltinFn} from './builtin'; import {DynamicValue} from './dynamic'; import {ForeignFunctionResolver} from './interface'; import {resolveKnownDeclaration} from './known_declaration'; -import {BuiltinFn, EnumValue, ResolvedModule, ResolvedValue, ResolvedValueArray, ResolvedValueMap} from './result'; +import {EnumValue, KnownFn, ResolvedModule, ResolvedValue, ResolvedValueArray, ResolvedValueMap} from './result'; import {evaluateTsHelperInline} from './ts_helpers'; @@ -404,7 +404,7 @@ export class StaticInterpreter { } // If the call refers to a builtin function, attempt to evaluate the function. - if (lhs instanceof BuiltinFn) { + if (lhs instanceof KnownFn) { return lhs.evaluate(node, this.evaluateFunctionArguments(node, context)); } diff --git a/packages/compiler-cli/src/ngtsc/partial_evaluator/src/result.ts b/packages/compiler-cli/src/ngtsc/partial_evaluator/src/result.ts index aafd8b31dd..96a0c49863 100644 --- a/packages/compiler-cli/src/ngtsc/partial_evaluator/src/result.ts +++ b/packages/compiler-cli/src/ngtsc/partial_evaluator/src/result.ts @@ -22,7 +22,7 @@ import {DynamicValue} from './dynamic'; * available statically. */ export type ResolvedValue = number | boolean | string | null | undefined | Reference | EnumValue | - ResolvedValueArray | ResolvedValueMap | ResolvedModule | BuiltinFn | DynamicValue; + ResolvedValueArray | ResolvedValueMap | ResolvedModule | KnownFn | DynamicValue; /** * An array of `ResolvedValue`s. @@ -76,8 +76,10 @@ export class EnumValue { } /** - * An implementation of a builtin function, such as `Array.prototype.slice`. + * An implementation of a known function that can be statically evaluated. + * It could be a built-in function or method (such as `Array.prototype.slice`) or a TypeScript + * helper (such as `__spread`). */ -export abstract class BuiltinFn { +export abstract class KnownFn { abstract evaluate(node: ts.CallExpression, args: ResolvedValueArray): ResolvedValue; } diff --git a/packages/compiler-cli/src/ngtsc/partial_evaluator/src/ts_helpers.ts b/packages/compiler-cli/src/ngtsc/partial_evaluator/src/ts_helpers.ts index c4e894bfb1..ad515b5977 100644 --- a/packages/compiler-cli/src/ngtsc/partial_evaluator/src/ts_helpers.ts +++ b/packages/compiler-cli/src/ngtsc/partial_evaluator/src/ts_helpers.ts @@ -16,8 +16,8 @@ import {ResolvedValue, ResolvedValueArray} from './result'; /** - * Instance of the `Object.assign` builtin function. Used for evaluating - * the "__assign" TypeScript helper. + * Instance of the known `Object.assign` built-in function. Used for evaluating + * the `__assign` TypeScript helper. */ const objectAssignBuiltinFn = new ObjectAssignBuiltinFn();