diff options
author | 2021-04-20 14:59:21 -0700 | |
---|---|---|
committer | 2021-04-20 14:59:21 -0700 | |
commit | 775bac7bbcf50eae02b73916e02fbd4f4e87baeb (patch) | |
tree | 23929f2ec388fa39eaedb582597001e7ccceec44 /src/js_ast.zig | |
parent | ba1c784316a062124b56f4643af200c0508a1006 (diff) | |
download | bun-775bac7bbcf50eae02b73916e02fbd4f4e87baeb.tar.gz bun-775bac7bbcf50eae02b73916e02fbd4f4e87baeb.tar.zst bun-775bac7bbcf50eae02b73916e02fbd4f4e87baeb.zip |
wip
Diffstat (limited to 'src/js_ast.zig')
-rw-r--r-- | src/js_ast.zig | 178 |
1 files changed, 177 insertions, 1 deletions
diff --git a/src/js_ast.zig b/src/js_ast.zig index 86d641224..a5894e6fa 100644 --- a/src/js_ast.zig +++ b/src/js_ast.zig @@ -680,7 +680,183 @@ pub const Stmt = struct { loc: logger.Loc, data: Data, - const Data = union(enum) { + pub fn init(t: anytype, loc: logger.Loc) Stmt { + switch (@TypeOf(t)) { + S.Block => { + return Stmt{ + .loc = loc, + .data = Data{ .s_block = t }, + }; + }, + S.Comment => { + return Stmt{ + .loc = loc, + .data = Data{ .s_comment = t }, + }; + }, + S.Directive => { + return Stmt{ + .loc = loc, + .data = Data{ .s_directive = t }, + }; + }, + S.ExportClause => { + return Stmt{ + .loc = loc, + .data = Data{ .s_export_clause = t }, + }; + }, + S.Empty => { + return Stmt{ + .loc = loc, + .data = Data{ .s_empty = t }, + }; + }, + S.TypeScript => { + return Stmt{ + .loc = loc, + .data = Data{ .s_type_script = t }, + }; + }, + S.Debugger => { + return Stmt{ + .loc = loc, + .data = Data{ .s_debugger = t }, + }; + }, + S.ExportFrom => { + return Stmt{ + .loc = loc, + .data = Data{ .s_export_from = t }, + }; + }, + S.ExportDefault => { + return Stmt{ + .loc = loc, + .data = Data{ .s_export_default = t }, + }; + }, + S.Enum => { + return Stmt{ + .loc = loc, + .data = Data{ .s_enum = t }, + }; + }, + S.Namespace => { + return Stmt{ + .loc = loc, + .data = Data{ .s_namespace = t }, + }; + }, + S.Function => { + return Stmt{ + .loc = loc, + .data = Data{ .s_function = t }, + }; + }, + S.Class => { + return Stmt{ + .loc = loc, + .data = Data{ .s_class = t }, + }; + }, + S.If => { + return Stmt{ + .loc = loc, + .data = Data{ .s_if = t }, + }; + }, + S.For => { + return Stmt{ + .loc = loc, + .data = Data{ .s_for = t }, + }; + }, + S.ForIn => { + return Stmt{ + .loc = loc, + .data = Data{ .s_for_in = t }, + }; + }, + S.ForOf => { + return Stmt{ + .loc = loc, + .data = Data{ .s_for_of = t }, + }; + }, + S.DoWhile => { + return Stmt{ + .loc = loc, + .data = Data{ .s_do_while = t }, + }; + }, + S.While => { + return Stmt{ + .loc = loc, + .data = Data{ .s_while = t }, + }; + }, + S.With => { + return Stmt{ + .loc = loc, + .data = Data{ .s_with = t }, + }; + }, + S.Try => { + return Stmt{ + .loc = loc, + .data = Data{ .s_try = t }, + }; + }, + S.Switch => { + return Stmt{ + .loc = loc, + .data = Data{ .s_switch = t }, + }; + }, + S.Import => { + return Stmt{ + .loc = loc, + .data = Data{ .s_import = t }, + }; + }, + S.Return => { + return Stmt{ + .loc = loc, + .data = Data{ .s_return = t }, + }; + }, + S.Throw => { + return Stmt{ + .loc = loc, + .data = Data{ .s_throw = t }, + }; + }, + S.Local => { + return Stmt{ + .loc = loc, + .data = Data{ .s_local = t }, + }; + }, + S.Break => { + return Stmt{ + .loc = loc, + .data = Data{ .s_break = t }, + }; + }, + S.Continue => { + return Stmt{ + .loc = loc, + .data = Data{ .s_continue = t }, + }; + }, + else => { + @compileError("Invalid type in Stmt.init"); + }, + } + } + + pub const Data = union(enum) { s_block: S.Block, s_comment: S.Comment, s_directive: S.Directive, |