From 5c052ec53eceb6da0e98c178c238a9a95954cdd2 Mon Sep 17 00:00:00 2001 From: Bruce Miller Date: Sat, 1 Jul 2023 13:50:40 -0400 Subject: [PATCH] Use combined TRACING control to minimize lookups --- lib/LaTeXML/Core/Definition/Conditional.pm | 6 +++--- lib/LaTeXML/Core/Definition/Constructor.pm | 6 ++++-- lib/LaTeXML/Core/Definition/Expandable.pm | 16 ++++++++-------- lib/LaTeXML/Core/Definition/Primitive.pm | 6 ++++-- lib/LaTeXML/Core/Definition/Register.pm | 5 +++-- lib/LaTeXML/Core/Whatsit.pm | 2 +- 6 files changed, 23 insertions(+), 18 deletions(-) diff --git a/lib/LaTeXML/Core/Definition/Conditional.pm b/lib/LaTeXML/Core/Definition/Conditional.pm index b26baa0201..d98053f7d1 100644 --- a/lib/LaTeXML/Core/Definition/Conditional.pm +++ b/lib/LaTeXML/Core/Definition/Conditional.pm @@ -66,7 +66,7 @@ sub invoke_conditional { my $parms = $$self{parameters}; my @args = ($parms ? $parms->readArguments($gullet) : ()); $$LaTeXML::IFFRAME{parsing} = 0; # Now, we're done parsing the Test clause. - my $tracing = $STATE->lookupValue('TRACINGCOMMANDS') || $LaTeXML::DEBUG{tracing}; + my $tracing = ($STATE->lookupValue('TRACING') || 0) & 2; if ($tracing) { Debug('{' . $self->tracingCSName . "} [#$ifid]"); Debug($self->tracingArgs(@args)) if @args; } @@ -169,7 +169,7 @@ sub invoke_else { Debug('{' . ToString($LaTeXML::CURRENT_TOKEN) . '}' . " [for " . ToString($$LaTeXML::IFFRAME{token}) . " #" . $$LaTeXML::IFFRAME{ifid} . " skipping to " . ToString($t) . "]") - if $STATE->lookupValue('TRACINGCOMMANDS') || $LaTeXML::DEBUG{tracing}; + if ($STATE->lookupValue('TRACING') || 0) & 2; return; } } sub invoke_fi { @@ -187,7 +187,7 @@ sub invoke_fi { $STATE->shiftValue('if_stack'); # Done with this frame Debug('{' . ToString($LaTeXML::CURRENT_TOKEN) . '}' . " [for " . Stringify($$LaTeXML::IFFRAME{token}) . " #" . $$LaTeXML::IFFRAME{ifid} . "]") - if $STATE->lookupValue('TRACINGCOMMANDS') || $LaTeXML::DEBUG{tracing}; + if ($STATE->lookupValue('TRACING') || 0) & 2; return; } } sub equals { diff --git a/lib/LaTeXML/Core/Definition/Constructor.pm b/lib/LaTeXML/Core/Definition/Constructor.pm index 48a7c79f76..06014208cb 100644 --- a/lib/LaTeXML/Core/Definition/Constructor.pm +++ b/lib/LaTeXML/Core/Definition/Constructor.pm @@ -76,8 +76,10 @@ sub getNumArgs { sub invoke { my ($self, $stomach) = @_; # Call any `Before' code. - my $profiled = $STATE->lookupValue('PROFILING') && ($LaTeXML::CURRENT_TOKEN || $$self{cs}); - my $tracing = $STATE->lookupValue('TRACINGCOMMANDS') || $LaTeXML::DEBUG{tracing}; + my $_tracing = $STATE->lookupValue('TRACING') || 0; + my $tracing = ($_tracing & 2); + my $profiled = ($_tracing & 4) && ($LaTeXML::CURRENT_TOKEN || $$self{cs}); + LaTeXML::Core::Definition::startProfiling($profiled, 'digest') if $profiled; my @pre = $self->executeBeforeDigest($stomach); diff --git a/lib/LaTeXML/Core/Definition/Expandable.pm b/lib/LaTeXML/Core/Definition/Expandable.pm index dd13247c0b..cb6e746f4b 100644 --- a/lib/LaTeXML/Core/Definition/Expandable.pm +++ b/lib/LaTeXML/Core/Definition/Expandable.pm @@ -58,9 +58,10 @@ sub invoke { no warnings 'recursion'; my ($self, $gullet, $onceonly) = @_; # shortcut for "trivial" macros; but only if not tracing & profiling!!!! - my $tracing = $STATE->lookupValue('TRACINGMACROS'); - my $profiled = $STATE->lookupValue('PROFILING') && ($LaTeXML::CURRENT_TOKEN || $$self{cs}); my $expansion = $self->getExpansion; + my $_tracing = $STATE->lookupValue('TRACING') || 0; + my $tracing = ($_tracing & 1); + my $profiled = ($_tracing & 4) && ($LaTeXML::CURRENT_TOKEN || $$self{cs}); my $etype = ref $expansion; my $iscode = $etype eq 'CODE'; my $result; @@ -71,12 +72,11 @@ sub invoke { # Harder to emulate \tracingmacros here. my @args = ($parms ? $parms->readArguments($gullet, $self) : ()); $result = Tokens(&$expansion($gullet, @args)); - if ($tracing || $LaTeXML::DEBUG{tracing}) { # More involved... + if ($tracing) { Debug($self->tracingCSName . ' ==> ' . tracetoString($result)); Debug($self->tracingArgs(@args)) if @args; } } - elsif (!$$self{parameters}) { # Trivial macro - Debug($self->tracingCSName . ' ->' . tracetoString($expansion)) - if $tracing || $LaTeXML::DEBUG{tracing}; + elsif (!$parms) { # Trivial macro + Debug($self->tracingCSName . ' ->' . tracetoString($expansion)) if $tracing; # For trivial expansion, make sure we don't get \cs or \relax\cs direct recursion! if (!$onceonly && $$self{cs}) { my ($t0, $t1) = ($etype eq 'LaTeXML::Core::Tokens' @@ -89,13 +89,13 @@ sub invoke { $expansion = Tokens(); } } $result = $expansion; } else { - my @args = ($parms ? $parms->readArguments($gullet, $self) : ()); + my @args = $parms->readArguments($gullet, $self); # for "real" macros, make sure all args are Tokens my $r; my @targs = map { ($_ && ($r = ref $_) && (($r eq 'LaTeXML::Core::Token') || ($r eq 'LaTeXML::Core::Tokens')) ? $_ : Tokens(Revert($_))); } @args; - if ($tracing || $LaTeXML::DEBUG{tracing}) { # More involved... + if ($tracing) { # More involved... Debug($self->tracingCSName . ' ->' . tracetoString($expansion)); Debug($self->tracingArgs(@targs)) if @args; } $result = $expansion->substituteParameters(@targs); } diff --git a/lib/LaTeXML/Core/Definition/Primitive.pm b/lib/LaTeXML/Core/Definition/Primitive.pm index 6c5252556c..5baece489f 100644 --- a/lib/LaTeXML/Core/Definition/Primitive.pm +++ b/lib/LaTeXML/Core/Definition/Primitive.pm @@ -51,8 +51,10 @@ sub executeAfterDigest { # Digest the primitive; this should occur in the stomach. sub invoke { my ($self, $stomach) = @_; - my $profiled = $STATE->lookupValue('PROFILING') && ($LaTeXML::CURRENT_TOKEN || $$self{cs}); - my $tracing = $STATE->lookupValue('TRACINGCOMMANDS') || $LaTeXML::DEBUG{tracing}; + my $_tracing = $STATE->lookupValue('TRACING') || 0; + my $tracing = ($_tracing & 2); # tracing commands + my $profiled = ($_tracing & 4) && ($LaTeXML::CURRENT_TOKEN || $$self{cs}); + LaTeXML::Core::Definition::startProfiling($profiled, 'digest') if $profiled; Debug('{' . $self->tracingCSName . '}') if $tracing; my @result = ($self->executeBeforeDigest($stomach)); diff --git a/lib/LaTeXML/Core/Definition/Register.pm b/lib/LaTeXML/Core/Definition/Register.pm index 56c040b1dc..d51a1c8c76 100644 --- a/lib/LaTeXML/Core/Definition/Register.pm +++ b/lib/LaTeXML/Core/Definition/Register.pm @@ -57,7 +57,7 @@ sub valueOf { sub setValue { my ($self, $value, $scope, @args) = @_; - my $tracing = $STATE->lookupValue('TRACINGCOMMANDS') || $LaTeXML::DEBUG{tracing}; + my $tracing = (($STATE->lookupValue('TRACING') || 0) & 2); # tracing commands if ($tracing) { my $scope = $STATE->getPrefix('global') ? 'globally ' : ''; my $csname = ToString($$self{cs}); @@ -96,7 +96,8 @@ sub addValue { # (other than afterassign) sub invoke { my ($self, $stomach) = @_; - my $profiled = $STATE->lookupValue('PROFILING') && ($LaTeXML::CURRENT_TOKEN || $$self{cs}); + my $_tracing = $STATE->lookupValue('TRACING') || 0; + my $profiled = ($_tracing & 4) && ($LaTeXML::CURRENT_TOKEN || $$self{cs}); LaTeXML::Core::Definition::startProfiling($profiled, 'digest') if $profiled; my $gullet = $stomach->getGullet; diff --git a/lib/LaTeXML/Core/Whatsit.pm b/lib/LaTeXML/Core/Whatsit.pm index ccfd99b4d2..623066d745 100644 --- a/lib/LaTeXML/Core/Whatsit.pm +++ b/lib/LaTeXML/Core/Whatsit.pm @@ -210,7 +210,7 @@ sub beAbsorbed { "Whatsit absorb limit of $LaTeXML::ABSORB_LIMIT exceeded, infinite loop?"); } } my $defn = $self->getDefinition; - my $profiled = $STATE->lookupValue('PROFILING') && $defn->getCS; + my $profiled = (($STATE->lookupValue('TRACING') || 0) & 4) && $defn->getCS; LaTeXML::Core::Definition::startProfiling($profiled, 'absorb') if $profiled; my @result = $defn->doAbsorbtion($document, $self); LaTeXML::Core::Definition::stopProfiling($profiled, 'absorb') if $profiled;