Skip to content

Commit

Permalink
began offloading converter logic to treePosition
Browse files Browse the repository at this point in the history
  • Loading branch information
mahrud committed Aug 26, 2024
1 parent 30e0894 commit 0b116af
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 6 deletions.
6 changes: 1 addition & 5 deletions M2/Macaulay2/d/convertr.d
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,6 @@ combinePositionR(L:Position, R:Position):Position := Position(
combinePositionC(L:Position, R:Position, C:Position):Position := Position(
L.filename, L.lineL, L.columnL, R.lineR, R.columnR, C.lineF, C.columnF, L.loadDepth);

-- combine two positions belonging to adjacent tokens (focus is on endpoint of the first one)
combinePositionAdjacent(L:Position, R:Position):Position := Position(
L.filename, L.lineL, L.columnL, R.lineR, R.columnR, L.lineR, L.columnR, L.loadDepth);

convert0(e:ParseTree):Code;
convert(e:ParseTree):Code;
unseq(c:Code):Code;
Expand Down Expand Up @@ -217,7 +213,7 @@ export convert0(e:ParseTree):Code := (
else Code(localMemoryReferenceCode(nestingDepth(var.frameID,token.dictionary),var.frameindex,token.position))
)
)
is a:Adjacent do Code(adjacentCode(unseq(c:=convert0(a.lhs)), unseq(cc:=convert0(a.rhs)), combinePositionAdjacent(codePosition(c), codePosition(cc))))
is a:Adjacent do Code(adjacentCode(convert(a.lhs), convert(a.rhs), treePosition(e)))
is p:EmptyParentheses do (
pp := combinePositionL(p.left.position, p.right.position);
if p.left.word == leftparen then Code(sequenceCode(CodeSequence(),pp))
Expand Down
6 changes: 5 additions & 1 deletion M2/Macaulay2/d/parser.d
Original file line number Diff line number Diff line change
Expand Up @@ -514,7 +514,11 @@ export unarynew(newToken:Token, file:TokenFile, prec:int, obeylines:bool):ParseT

export treePosition(e:ParseTree):Position := (
when e
is a:Adjacent do treePosition(a.lhs)
is a:Adjacent do (
L := treePosition(a.lhs);
R := treePosition(a.rhs);
-- combine the two positions with focus on endpoint of lhs
Position(L.filename, L.lineL, L.columnL, R.lineR, R.columnR, L.lineR, L.columnR, L.loadDepth))
is p:Parentheses do p.left.position
is p:EmptyParentheses do p.left.position
is o:Arrow do o.Operator.position
Expand Down
42 changes: 42 additions & 0 deletions M2/Macaulay2/tests/normal/locate.m2
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,26 @@ assert( (drop(toSequence locate C, 1)) === (1,10,1,54,1,43) );
assert( (drop(toSequence locate C_0, 1)) === (1,15,1,19,1,15) );
assert( (drop(toSequence locate C_1, 1)) === (1,29,1,35,1,29) );
assert( (drop(toSequence locate C_2, 1)) === (1,45,1,52,1,45) );
f = () -> A B C D
assert( ((C = pseudocode functionBody f;)) === null );
assert( (drop(toSequence locate f, 1)) === (1,4,1,17,1,7) );
assert( (drop(toSequence locate C, 1)) === (1,10,1,17,1,11) );
assert( (drop(toSequence locate C_0, 1)) === (1,10,1,11,1,10) );
assert( (drop(toSequence locate C_1, 1)) === (1,12,1,17,1,13) );
assert( (drop(toSequence locate C_1_0, 1)) === (1,12,1,13,1,12) );
assert( (drop(toSequence locate C_1_1, 1)) === (1,14,1,17,1,15) );
assert( (drop(toSequence locate C_1_1_0, 1)) === (1,14,1,15,1,14) );
assert( (drop(toSequence locate C_1_1_1, 1)) === (1,16,1,17,1,16) );
f = () -> ((A B) C) D
assert( ((C = pseudocode functionBody f;)) === null );
assert( (drop(toSequence locate f, 1)) === (1,4,1,21,1,7) );
assert( (drop(toSequence locate C, 1)) === (1,10,1,21,1,11) );
assert( (drop(toSequence locate C_0, 1)) === (1,11,1,18,1,12) );
assert( (drop(toSequence locate C_1, 1)) === (1,20,1,21,1,20) );
assert( (drop(toSequence locate C_0_0, 1)) === (1,12,1,15,1,13) );
assert( (drop(toSequence locate C_0_1, 1)) === (1,17,1,18,1,17) );
assert( (drop(toSequence locate C_0_0_0, 1)) === (1,12,1,13,1,12) );
assert( (drop(toSequence locate C_0_0_1, 1)) === (1,14,1,15,1,14) );
end--
-*
-- to update this file simply run these lines:
Expand All @@ -30,4 +50,26 @@ drop(toSequence locate C_0, 1)
drop(toSequence locate C_1, 1)
drop(toSequence locate C_2, 1)

-- Adjacent
-- 1 1 1
-- 4 7 0 2 4
f = () -> A B C
(C = pseudocode functionBody f;)
drop(toSequence locate f, 1)
drop(toSequence locate C, 1)
drop(toSequence locate C_0, 1)
drop(toSequence locate C_1, 1)
drop(toSequence locate C_1_0, 1)
drop(toSequence locate C_1_1, 1)
-- 1 1 1
-- 4 7 0 3 5
f = () -> (A B) C
(C = pseudocode functionBody f;)
drop(toSequence locate f, 1)
drop(toSequence locate C, 1)
drop(toSequence locate C_0, 1)
drop(toSequence locate C_1, 1)
drop(toSequence locate C_0_0, 1)
drop(toSequence locate C_0_1, 1)

-- TODO: add tests for other kinds of code as well

0 comments on commit 0b116af

Please sign in to comment.