aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2022-08-17 10:20:36 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2022-08-17 10:20:36 -0400
commit3cccac26dc804704446cd88676dc583f997252fd (patch)
tree97ad0827866e7290740ac0e3ab0a245174421c02 /src
parentf35eb238324d446c383a36828d7154001a2badd5 (diff)
Index-based is better than mask-based tracing (e.g. for strings and comments)
Diffstat (limited to 'src')
-rw-r--r--src/c.bqn4
-rw-r--r--src/e.bqn4
-rw-r--r--src/eu.bqn4
-rw-r--r--src/pp.bqn4
4 files changed, 8 insertions, 8 deletions
diff --git a/src/c.bqn b/src/c.bqn
index eaf221b3..fb4f88b1 100644
--- a/src/c.bqn
+++ b/src/c.bqn
@@ -46,8 +46,8 @@ Tokenize←{System‿vars←𝕨
c←𝕩='#'⋄s←/0‿0⊸«⊸∧sm←𝕩='''⋄d←/dm←𝕩='"'
g←⍋q←∾⟨ s⋄¯1↓d⋄/c⟩ ⋄q↩g⊏q # Open indices
e← g⊏∾⟨2+s⋄ 1↓d⋄-⟜»∘⊏⟜(0∾+`c)⊸//(𝕩∊lf)∾1⟩ # Matching close indices
- Se←{(⊏˜𝕨)Se 1¨⌾((𝕩/𝕨)⊸⊏)𝕩}⍟(0=¯1⊑⊢) # Mark reachable openings
- St←(≠𝕩)↑·/⁼((≠↑∾⟜≠Se 1∾0¨)q⍋e)⊸/ # All indices → reached mask
+ Se←≠(>/⊢)∾⟜≠{(⊏˜𝕨)𝕊⍟(≠○(¯1⊸⊑))𝕩∾𝕩⊏𝕨}⟨0⟩˙ # Find reachable openings
+ St←(≠𝕩)↑·/⁼(Se q⍋e)⊸⊏ # All indices → reached mask
a←St q⋄b←St e⋄f←1≠`ab←a∨b # Open/close masks; filter
{!⟨⊑/𝕩,"Unclosed quote"⟩}⍟(∨´)(sm∨dm)∧b<f
diff --git a/src/e.bqn b/src/e.bqn
index 4946b653..6fccfa0a 100644
--- a/src/e.bqn
+++ b/src/e.bqn
@@ -47,8 +47,8 @@ Explain ← {
m ← { # Mask of instruction starts
n ← (↕≠b)+1+ba(⊣⊏˜≠⊸>×⊢)b
- Se←{(⊏˜𝕨)Se 1¨⌾((𝕩/𝕨)⊸⊏)𝕩}⍟(0=¯1⊑⊢)
- (≠↑∾⟜≠Se 1∾0¨) n
+ Se←≠(>/⊢)∾⟜≠{(⊏˜𝕨)𝕊⍟(≠○(¯1⊸⊑))𝕩∾𝕩⊏𝕨}⟨0⟩˙
+ (≠↑·/⁼Se) n
}
mb‿mi ← 0‿¯1 ↓¨ m⊸/¨ b‿i
la←¯1=na←mb⊏bc
diff --git a/src/eu.bqn b/src/eu.bqn
index 39677b54..0f3d0a20 100644
--- a/src/eu.bqn
+++ b/src/eu.bqn
@@ -14,8 +14,8 @@ Explain ← {
m ← { # Mask of instruction starts
n ← (↕≠b)+1+ba(⊣⊏˜≠⊸>×⊢)b
- Se←{(⊏˜𝕨)Se 1¨⌾((𝕩/𝕨)⊸⊏)𝕩}⍟(0=¯1⊑⊢)
- (≠↑∾⟜≠Se 1∾0¨) n
+ Se←≠(>/⊢)∾⟜≠{(⊏˜𝕨)𝕊⍟(≠○(¯1⊸⊑))𝕩∾𝕩⊏𝕨}⟨0⟩˙
+ (≠↑·/⁼Se) n
}
mb‿mi ← 0‿¯1 ↓¨ m⊸/¨ b‿i
la←¯1=na←mb⊏bc
diff --git a/src/pp.bqn b/src/pp.bqn
index 6ce99f12..255d214a 100644
--- a/src/pp.bqn
+++ b/src/pp.bqn
@@ -26,8 +26,8 @@ Tokenize←{
s‿d←/¨2↑sm‿dm‿c‿n←𝕩⊸=¨"'""#"∾lf
g←⍋q←∾⟨ s⋄¯1↓d⋄/c⟩ ⋄q↩g⊏q # Open indices
e← g⊏∾⟨2+s⋄ 1↓d⋄-⟜»∘⊏⟜(0∾+`c)⊸//n∾1⟩ # Matching close indices
- Se←{(⊏˜𝕨)Se 1¨⌾((𝕩/𝕨)⊸⊏)𝕩}⍟(0=¯1⊑⊢) # Mark reachable openings
- ab←(≠𝕩)↑/⁼⥊((≠↑∾⟜≠Se 1∾0¨)q⍋e)/⍉q≍e # Open/close masks
+ Se←≠(>/⊢)∾⟜≠{(⊏˜𝕨)𝕊⍟(≠○(¯1⊸⊑))𝕩∾𝕩⊏𝕨}⟨0⟩˙ # Find reachable openings
+ ab←(≠𝕩)↑/⁼⥊(Se q⍋e)⊏⍉q≍e # Open/close masks
k←(n∧ab)<»(𝕩='•')∨(∧⟜«𝕩∊wc)∨≠`ab # Token continuation mask
(¯1+`¬k)⊔𝕩