mirror of
https://github.com/swc-project/swc.git
synced 2024-12-26 23:27:56 +03:00
146 lines
6.6 KiB
TypeScript
146 lines
6.6 KiB
TypeScript
// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0.
|
|
// See LICENSE.txt in the project root for complete license information.
|
|
|
|
///<reference path='typescript.ts' />
|
|
|
|
module TypeScript.AstWalkerWithDetailCallback {
|
|
export interface AstWalkerDetailCallback {
|
|
EmptyCallback? (pre, ast: AST): boolean;
|
|
EmptyExprCallback? (pre, ast: AST): boolean;
|
|
TrueCallback? (pre, ast: AST): boolean;
|
|
FalseCallback? (pre, ast: AST): boolean;
|
|
ThisCallback? (pre, ast: AST): boolean;
|
|
SuperCallback? (pre, ast: AST): boolean;
|
|
QStringCallback? (pre, ast: AST): boolean;
|
|
RegexCallback? (pre, ast: AST): boolean;
|
|
NullCallback? (pre, ast: AST): boolean;
|
|
ArrayLitCallback? (pre, ast: AST): boolean;
|
|
ObjectLitCallback? (pre, ast: AST): boolean;
|
|
VoidCallback? (pre, ast: AST): boolean;
|
|
CommaCallback? (pre, ast: AST): boolean;
|
|
PosCallback? (pre, ast: AST): boolean;
|
|
NegCallback? (pre, ast: AST): boolean;
|
|
DeleteCallback? (pre, ast: AST): boolean;
|
|
AwaitCallback? (pre, ast: AST): boolean;
|
|
InCallback? (pre, ast: AST): boolean;
|
|
DotCallback? (pre, ast: AST): boolean;
|
|
FromCallback? (pre, ast: AST): boolean;
|
|
IsCallback? (pre, ast: AST): boolean;
|
|
InstOfCallback? (pre, ast: AST): boolean;
|
|
TypeofCallback? (pre, ast: AST): boolean;
|
|
NumberLitCallback? (pre, ast: AST): boolean;
|
|
NameCallback? (pre, identifierAst: Identifier): boolean;
|
|
TypeRefCallback? (pre, ast: AST): boolean;
|
|
IndexCallback? (pre, ast: AST): boolean;
|
|
CallCallback? (pre, ast: AST): boolean;
|
|
NewCallback? (pre, ast: AST): boolean;
|
|
AsgCallback? (pre, ast: AST): boolean;
|
|
AsgAddCallback? (pre, ast: AST): boolean;
|
|
AsgSubCallback? (pre, ast: AST): boolean;
|
|
AsgDivCallback? (pre, ast: AST): boolean;
|
|
AsgMulCallback? (pre, ast: AST): boolean;
|
|
AsgModCallback? (pre, ast: AST): boolean;
|
|
AsgAndCallback? (pre, ast: AST): boolean;
|
|
AsgXorCallback? (pre, ast: AST): boolean;
|
|
AsgOrCallback? (pre, ast: AST): boolean;
|
|
AsgLshCallback? (pre, ast: AST): boolean;
|
|
AsgRshCallback? (pre, ast: AST): boolean;
|
|
AsgRs2Callback? (pre, ast: AST): boolean;
|
|
QMarkCallback? (pre, ast: AST): boolean;
|
|
LogOrCallback? (pre, ast: AST): boolean;
|
|
LogAndCallback? (pre, ast: AST): boolean;
|
|
OrCallback? (pre, ast: AST): boolean;
|
|
XorCallback? (pre, ast: AST): boolean;
|
|
AndCallback? (pre, ast: AST): boolean;
|
|
EqCallback? (pre, ast: AST): boolean;
|
|
NeCallback? (pre, ast: AST): boolean;
|
|
EqvCallback? (pre, ast: AST): boolean;
|
|
NEqvCallback? (pre, ast: AST): boolean;
|
|
LtCallback? (pre, ast: AST): boolean;
|
|
LeCallback? (pre, ast: AST): boolean;
|
|
GtCallback? (pre, ast: AST): boolean;
|
|
GeCallback? (pre, ast: AST): boolean;
|
|
AddCallback? (pre, ast: AST): boolean;
|
|
SubCallback? (pre, ast: AST): boolean;
|
|
MulCallback? (pre, ast: AST): boolean;
|
|
DivCallback? (pre, ast: AST): boolean;
|
|
ModCallback? (pre, ast: AST): boolean;
|
|
LshCallback? (pre, ast: AST): boolean;
|
|
RshCallback? (pre, ast: AST): boolean;
|
|
Rs2Callback? (pre, ast: AST): boolean;
|
|
NotCallback? (pre, ast: AST): boolean;
|
|
LogNotCallback? (pre, ast: AST): boolean;
|
|
IncPreCallback? (pre, ast: AST): boolean;
|
|
DecPreCallback? (pre, ast: AST): boolean;
|
|
IncPostCallback? (pre, ast: AST): boolean;
|
|
DecPostCallback? (pre, ast: AST): boolean;
|
|
TypeAssertionCallback? (pre, ast: AST): boolean;
|
|
FuncDeclCallback? (pre, funcDecl: FuncDecl): boolean;
|
|
MemberCallback? (pre, ast: AST): boolean;
|
|
VarDeclCallback? (pre, varDecl: VarDecl): boolean;
|
|
ArgDeclCallback? (pre, ast: AST): boolean;
|
|
ReturnCallback? (pre, ast: AST): boolean;
|
|
BreakCallback? (pre, ast: AST): boolean;
|
|
ContinueCallback? (pre, ast: AST): boolean;
|
|
ThrowCallback? (pre, ast: AST): boolean;
|
|
ForCallback? (pre, ast: AST): boolean;
|
|
ForInCallback? (pre, ast: AST): boolean;
|
|
IfCallback? (pre, ast: AST): boolean;
|
|
WhileCallback? (pre, ast: AST): boolean;
|
|
DoWhileCallback? (pre, ast: AST): boolean;
|
|
BlockCallback? (pre, block: Block): boolean;
|
|
CaseCallback? (pre, ast: AST): boolean;
|
|
SwitchCallback? (pre, ast: AST): boolean;
|
|
TryCallback? (pre, ast: AST): boolean;
|
|
TryCatchCallback? (pre, ast: AST): boolean;
|
|
TryFinallyCallback? (pre, ast: AST): boolean;
|
|
FinallyCallback? (pre, ast: AST): boolean;
|
|
CatchCallback? (pre, ast: AST): boolean;
|
|
ListCallback? (pre, astList: ASTList): boolean;
|
|
ScriptCallback? (pre, script: Script): boolean;
|
|
ClassDeclarationCallback? (pre, ast: AST): boolean;
|
|
InterfaceDeclarationCallback? (pre, interfaceDecl: InterfaceDeclaration): boolean;
|
|
ModuleDeclarationCallback? (pre, moduleDecl: ModuleDeclaration): boolean;
|
|
ImportDeclarationCallback? (pre, ast: AST): boolean;
|
|
WithCallback? (pre, ast: AST): boolean;
|
|
LabelCallback? (pre, labelAST: AST): boolean;
|
|
LabeledStatementCallback? (pre, ast: AST): boolean;
|
|
EBStartCallback? (pre, ast: AST): boolean;
|
|
GotoEBCallback? (pre, ast: AST): boolean;
|
|
EndCodeCallback? (pre, ast: AST): boolean;
|
|
ErrorCallback? (pre, ast: AST): boolean;
|
|
CommentCallback? (pre, ast: AST): boolean;
|
|
DebuggerCallback? (pre, ast: AST): boolean;
|
|
DefaultCallback? (pre, ast: AST): boolean;
|
|
}
|
|
|
|
export function walk(script: Script, callback: AstWalkerDetailCallback): void {
|
|
var pre = (cur: AST, parent: AST) => {
|
|
walker.options.goChildren = AstWalkerCallback(true, cur, callback);
|
|
return cur;
|
|
}
|
|
|
|
var post = (cur: AST, parent: AST) => {
|
|
AstWalkerCallback(false, cur, callback);
|
|
return cur;
|
|
}
|
|
|
|
var walker = TypeScript.getAstWalkerFactory().getWalker(pre, post);
|
|
walker.walk(script, null);
|
|
}
|
|
|
|
function AstWalkerCallback(pre: boolean, ast: AST, callback: AstWalkerDetailCallback): boolean {
|
|
// See if the Callback needs to be handled using specific one or default one
|
|
var nodeType = ast.nodeType;
|
|
var callbackString = (<any>NodeType)._map[nodeType] + "Callback";
|
|
if (callback[callbackString]) {
|
|
return callback[callbackString](pre, ast);
|
|
}
|
|
|
|
if (callback.DefaultCallback) {
|
|
return callback.DefaultCallback(pre, ast);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
} |