Skip to content

Commit 0811058

Browse files
committed
switch define data to flags
1 parent f5f8ff8 commit 0811058

File tree

4 files changed

+26
-22
lines changed

4 files changed

+26
-22
lines changed

internal/bundler_tests/bundler_dce_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1273,8 +1273,8 @@ func TestTreeShakingReactElements(t *testing.T) {
12731273

12741274
func TestDisableTreeShaking(t *testing.T) {
12751275
defines := config.ProcessDefines(map[string]config.DefineData{
1276-
"pure": {CallCanBeUnwrappedIfUnused: true},
1277-
"some.fn": {CallCanBeUnwrappedIfUnused: true},
1276+
"pure": {Flags: config.CallCanBeUnwrappedIfUnused},
1277+
"some.fn": {Flags: config.CallCanBeUnwrappedIfUnused},
12781278
})
12791279
dce_suite.expectBundled(t, bundled{
12801280
files: map[string]string{

internal/config/globals.go

+15-11
Original file line numberDiff line numberDiff line change
@@ -869,31 +869,35 @@ type DefineExpr struct {
869869

870870
type DefineData struct {
871871
DefineExpr *DefineExpr
872+
Flags DefineFlags
873+
}
874+
875+
type DefineFlags uint8
872876

877+
const (
873878
// True if accessing this value is known to not have any side effects. For
874879
// example, a bare reference to "Object.create" can be removed because it
875880
// does not have any observable side effects.
876-
CanBeRemovedIfUnused bool
881+
CanBeRemovedIfUnused DefineFlags = 1 << iota
877882

878883
// True if a call to this value is known to not have any side effects. For
879884
// example, a bare call to "Object()" can be removed because it does not
880885
// have any observable side effects.
881-
CallCanBeUnwrappedIfUnused bool
886+
CallCanBeUnwrappedIfUnused
882887

883888
// If true, the user has indicated that every direct calls to a property on
884889
// this object and all of that call's arguments are to be removed from the
885890
// output, even when the arguments have side effects. This is used to
886891
// implement the "--drop:console" flag.
887-
MethodCallsMustBeReplacedWithUndefined bool
892+
MethodCallsMustBeReplacedWithUndefined
893+
)
894+
895+
func (flags DefineFlags) Has(flag DefineFlags) bool {
896+
return (flags & flag) != 0
888897
}
889898

890899
func mergeDefineData(old DefineData, new DefineData) DefineData {
891-
if old.CanBeRemovedIfUnused {
892-
new.CanBeRemovedIfUnused = true
893-
}
894-
if old.CallCanBeUnwrappedIfUnused {
895-
new.CallCanBeUnwrappedIfUnused = true
896-
}
900+
new.Flags |= old.Flags
897901
return new
898902
}
899903

@@ -937,9 +941,9 @@ func ProcessDefines(userDefines map[string]DefineData) ProcessedDefines {
937941
for _, parts := range knownGlobals {
938942
tail := parts[len(parts)-1]
939943
if len(parts) == 1 {
940-
result.IdentifierDefines[tail] = DefineData{CanBeRemovedIfUnused: true}
944+
result.IdentifierDefines[tail] = DefineData{Flags: CanBeRemovedIfUnused}
941945
} else {
942-
result.DotDefines[tail] = append(result.DotDefines[tail], DotDefine{Parts: parts, Data: DefineData{CanBeRemovedIfUnused: true}})
946+
result.DotDefines[tail] = append(result.DotDefines[tail], DotDefine{Parts: parts, Data: DefineData{Flags: CanBeRemovedIfUnused}})
943947
}
944948
}
945949

internal/js_parser/js_parser.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -12880,13 +12880,13 @@ func (p *parser) visitExprInOut(expr js_ast.Expr, in exprIn) (js_ast.Expr, exprO
1288012880
}
1288112881

1288212882
// Copy the side effect flags over in case this expression is unused
12883-
if data.CanBeRemovedIfUnused {
12883+
if data.Flags.Has(config.CanBeRemovedIfUnused) {
1288412884
e.CanBeRemovedIfUnused = true
1288512885
}
12886-
if data.CallCanBeUnwrappedIfUnused && !p.options.ignoreDCEAnnotations {
12886+
if data.Flags.Has(config.CallCanBeUnwrappedIfUnused) && !p.options.ignoreDCEAnnotations {
1288712887
e.CallCanBeUnwrappedIfUnused = true
1288812888
}
12889-
if data.MethodCallsMustBeReplacedWithUndefined {
12889+
if data.Flags.Has(config.MethodCallsMustBeReplacedWithUndefined) {
1289012890
methodCallMustBeReplacedWithUndefined = true
1289112891
}
1289212892
}
@@ -13406,10 +13406,10 @@ func (p *parser) visitExprInOut(expr js_ast.Expr, in exprIn) (js_ast.Expr, exprO
1340613406
}
1340713407

1340813408
// Copy the side effect flags over in case this expression is unused
13409-
if define.Data.CanBeRemovedIfUnused {
13409+
if define.Data.Flags.Has(config.CanBeRemovedIfUnused) {
1341013410
e.CanBeRemovedIfUnused = true
1341113411
}
13412-
if define.Data.CallCanBeUnwrappedIfUnused && !p.options.ignoreDCEAnnotations {
13412+
if define.Data.Flags.Has(config.CallCanBeUnwrappedIfUnused) && !p.options.ignoreDCEAnnotations {
1341313413
e.CallCanBeUnwrappedIfUnused = true
1341413414
}
1341513415
break
@@ -13529,10 +13529,10 @@ func (p *parser) visitExprInOut(expr js_ast.Expr, in exprIn) (js_ast.Expr, exprO
1352913529
}
1353013530

1353113531
// Copy the side effect flags over in case this expression is unused
13532-
if define.Data.CanBeRemovedIfUnused {
13532+
if define.Data.Flags.Has(config.CanBeRemovedIfUnused) {
1353313533
e.CanBeRemovedIfUnused = true
1353413534
}
13535-
if define.Data.CallCanBeUnwrappedIfUnused && !p.options.ignoreDCEAnnotations {
13535+
if define.Data.Flags.Has(config.CallCanBeUnwrappedIfUnused) && !p.options.ignoreDCEAnnotations {
1353613536
e.CallCanBeUnwrappedIfUnused = true
1353713537
}
1353813538
break

pkg/api/api_impl.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ func validateDefines(
694694
// If we're dropping all console API calls, replace each one with undefined
695695
if (drop & DropConsole) != 0 {
696696
define := rawDefines["console"]
697-
define.MethodCallsMustBeReplacedWithUndefined = true
697+
define.Flags |= config.MethodCallsMustBeReplacedWithUndefined
698698
rawDefines["console"] = define
699699
}
700700

@@ -709,7 +709,7 @@ func validateDefines(
709709

710710
// Merge with any previously-specified defines
711711
define := rawDefines[key]
712-
define.CallCanBeUnwrappedIfUnused = true
712+
define.Flags |= config.CallCanBeUnwrappedIfUnused
713713
rawDefines[key] = define
714714
}
715715

0 commit comments

Comments
 (0)