fix: ensure strict mode when evaluating in JIT (#30122)

PR Close #30122
This commit is contained in:
Ben Lesh
2019-04-25 10:41:45 -07:00
committed by Alex Rickabaugh
parent 728db88280
commit 452f121486
2 changed files with 41 additions and 2 deletions

View File

@ -31,6 +31,13 @@ export class JitEvaluator {
createSourceMaps: boolean): {[key: string]: any} {
const converter = new JitEmitterVisitor(reflector);
const ctx = EmitterVisitorContext.createRoot();
// Ensure generated code is in strict mode
if (statements.length > 0 && !isUseStrictStatement(statements[0])) {
statements = [
o.literal('use strict').toStmt(),
...statements,
];
}
converter.visitAllStatements(statements, ctx);
converter.createReturnStmt(ctx);
return this.evaluateCode(sourceUrl, ctx, converter.getArgs(), createSourceMaps);
@ -150,3 +157,8 @@ export class JitEmitterVisitor extends AbstractJsEmitterVisitor {
ctx.print(ast, this._evalArgNames[id]);
}
}
function isUseStrictStatement(statement: o.Statement): boolean {
return statement.isEquivalent(o.literal('use strict').toStmt());
}