diff options
| author | 2021-05-18 20:06:08 -0700 | |
|---|---|---|
| committer | 2021-05-18 20:06:08 -0700 | |
| commit | 2fac6239771e89f3e88167e5eeec16666ff0cbc8 (patch) | |
| tree | dd0ae0ae6aa6c6c43407cefacc9057aa3e06bf80 /src/js_ast.zig | |
| parent | 7396fae4e2430eb474c6f2c2f5677faa567568e7 (diff) | |
| download | bun-2fac6239771e89f3e88167e5eeec16666ff0cbc8.tar.gz bun-2fac6239771e89f3e88167e5eeec16666ff0cbc8.tar.zst bun-2fac6239771e89f3e88167e5eeec16666ff0cbc8.zip | |
hm
Former-commit-id: 4d6a8f598afe29459f1b7b243daddaa4b395036f
Diffstat (limited to 'src/js_ast.zig')
| -rw-r--r-- | src/js_ast.zig | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/js_ast.zig b/src/js_ast.zig index bd2655289..71842789c 100644 --- a/src/js_ast.zig +++ b/src/js_ast.zig @@ -1058,16 +1058,20 @@ pub const Stmt = struct { } pub fn empty() Stmt { - return Stmt.init(&Stmt.None, logger.Loc.Empty); + return Stmt.init(Stmt.None, logger.Loc.Empty); } var None = S.Empty{}; pub fn init(origData: anytype, loc: logger.Loc) Stmt { - if (@typeInfo(@TypeOf(origData)) != .Pointer) { + if (@typeInfo(@TypeOf(origData)) != .Pointer and @TypeOf(origData) != S.Empty) { @compileError("Stmt.init needs a pointer."); } + if (@TypeOf(origData) == S.Empty) { + return Stmt{ .loc = loc, .data = Data{ .s_empty = S.Empty{} } }; + } + switch (@TypeOf(origData.*)) { S.Block => { return Stmt.comptime_init("s_block", S.Block, origData, loc); @@ -1210,7 +1214,7 @@ pub const Stmt = struct { return Stmt.comptime_alloc(allocator, "s_do_while", S.DoWhile, origData, loc); }, S.Empty => { - return Stmt.comptime_alloc(allocator, "s_empty", S.Empty, origData, loc); + return Stmt{ .loc = loc, .data = Data{ .s_empty = S.Empty{} } }; }, S.Enum => { return Stmt.comptime_alloc(allocator, "s_enum", S.Enum, origData, loc); @@ -1336,7 +1340,7 @@ pub const Stmt = struct { s_debugger: *S.Debugger, s_directive: *S.Directive, s_do_while: *S.DoWhile, - s_empty: *S.Empty, + s_empty: S.Empty, s_enum: *S.Enum, s_export_clause: *S.ExportClause, s_export_default: *S.ExportDefault, @@ -1382,7 +1386,12 @@ pub const Stmt = struct { pub const Expr = struct { loc: logger.Loc, data: Data, - + pub fn toEmpty(expr: *Expr) Expr { + return Expr{ .data = .{ .e_missing = E.Missing{} }, .loc = expr.loc }; + } + pub fn isEmpty(expr: *Expr) bool { + return std.meta.activeTag(expr.data) == .e_missing; + } pub const Query = struct { expr: Expr, loc: logger.Loc }; pub fn getProperty(expr: *const Expr, name: string) ?Query { @@ -1829,9 +1838,7 @@ pub const Expr = struct { return Expr{ .loc = loc, .data = Data{ .e_jsx_element = dat } }; }, E.Missing => { - var dat = allocator.create(E.Missing) catch unreachable; - dat.* = st; - return Expr{ .loc = loc, .data = Data{ .e_missing = dat } }; + return Expr{ .loc = loc, .data = Data{ .e_missing = E.Missing{} } }; }, E.Number => { var dat = allocator.create(E.Number) catch unreachable; @@ -2460,7 +2467,7 @@ pub const Expr = struct { e_import_identifier: *E.ImportIdentifier, e_private_identifier: *E.PrivateIdentifier, e_jsx_element: *E.JSXElement, - e_missing: *E.Missing, + e_missing: E.Missing, e_number: *E.Number, e_big_int: *E.BigInt, e_object: *E.Object, |
