mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
feat!: Indexes for nodes in the AST (#414)
Indexes allow associating extra data with nodes in the AST using an array and then quickly looking up the array to fetch the extra data. - Index eidx for expressions - Index sidx for statements - Index qidx for queries. AST nodes are not cloneable. Therefore once a module is created, it is not possible to accidentally create two nodes with the same index inadvertently via clone. Also added IndexChecker in debug builds. When a module is parsed, it will assert that indexes have been constructed correctly. AST Cleanup - Make literal expressions (null, val, number, string etc) also structs to match all other expressions - Merge True and False nodes into a single Bool node. Also update dependencies. Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
This commit is contained in:
committed by
GitHub
parent
620f8a4547
commit
444b2970a1
@@ -6,6 +6,7 @@ cases:
|
||||
rego: |
|
||||
package test
|
||||
import future.keywords
|
||||
num_expressions: 3
|
||||
imports:
|
||||
- span: import future.keywords
|
||||
refr:
|
||||
@@ -13,7 +14,9 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 1
|
||||
field: keywords
|
||||
eidx: 2
|
||||
|
||||
- note: all
|
||||
rego: |
|
||||
@@ -22,6 +25,7 @@ cases:
|
||||
import future.keywords.if
|
||||
import
|
||||
future.keywords.in
|
||||
num_expressions: 13
|
||||
imports:
|
||||
- span: import future.keywords.contains
|
||||
refr:
|
||||
@@ -32,8 +36,11 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 1
|
||||
field: keywords
|
||||
eidx: 2
|
||||
field: contains
|
||||
eidx: 3
|
||||
- span: import future.keywords.every
|
||||
refr:
|
||||
refdot:
|
||||
@@ -43,8 +50,11 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 4
|
||||
field: keywords
|
||||
eidx: 5
|
||||
field: every
|
||||
eidx: 6
|
||||
- span: import future.keywords.if
|
||||
refr:
|
||||
refdot:
|
||||
@@ -54,8 +64,11 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 7
|
||||
field: keywords
|
||||
eidx: 8
|
||||
field: if
|
||||
eidx: 9
|
||||
- span: "import\nfuture.keywords.in"
|
||||
refr:
|
||||
refdot:
|
||||
@@ -65,8 +78,11 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 10
|
||||
field: keywords
|
||||
eidx: 11
|
||||
field: in
|
||||
eidx: 12
|
||||
|
||||
- note: bracket
|
||||
rego: |
|
||||
@@ -74,6 +90,9 @@ cases:
|
||||
import future["keywords"]["contains"] import future.keywords["every"]
|
||||
import
|
||||
future["keywords"].if
|
||||
num_expressions: 14
|
||||
num_statements: 0
|
||||
num_queries: 0
|
||||
imports:
|
||||
- span: import future["keywords"]["contains"]
|
||||
refr:
|
||||
@@ -84,10 +103,15 @@ cases:
|
||||
span: future["keywords"]
|
||||
refr:
|
||||
var: future
|
||||
eidx: 1
|
||||
index:
|
||||
string: keywords
|
||||
eidx: 2
|
||||
eidx: 3
|
||||
index:
|
||||
string: contains
|
||||
eidx: 4
|
||||
eidx: 5
|
||||
- span: import future.keywords["every"]
|
||||
refr:
|
||||
refbrack:
|
||||
@@ -97,9 +121,13 @@ cases:
|
||||
span: future.keywords
|
||||
refr:
|
||||
var: future
|
||||
eidx: 6
|
||||
field: keywords
|
||||
eidx: 7
|
||||
index:
|
||||
string: every
|
||||
eidx: 8
|
||||
eidx: 9
|
||||
- span: "import\nfuture[\"keywords\"].if"
|
||||
refr:
|
||||
refdot:
|
||||
@@ -109,9 +137,13 @@ cases:
|
||||
span: future["keywords"]
|
||||
refr:
|
||||
var: future
|
||||
eidx: 10
|
||||
index:
|
||||
string: keywords
|
||||
eidx: 11
|
||||
eidx: 12
|
||||
field: if
|
||||
eidx: 13
|
||||
|
||||
- note: as
|
||||
rego: |
|
||||
@@ -126,6 +158,9 @@ cases:
|
||||
import future["keywords"]
|
||||
#error: "this import shadows previous import of `contains`"
|
||||
query: data.test
|
||||
num_expressions: 6
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
want_result: {}
|
||||
|
||||
- note: shadow/1
|
||||
@@ -134,6 +169,9 @@ cases:
|
||||
import future.keywords
|
||||
import future.keywords.if
|
||||
#error: "this import shadows previous import of `if`"
|
||||
num_expressions: 6
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
query: data.test
|
||||
want_result: {}
|
||||
|
||||
@@ -144,6 +182,9 @@ cases:
|
||||
import future.keywords
|
||||
#error: "this import shadows previous import of `if`"
|
||||
query: data.test
|
||||
num_expressions: 6
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
want_result: {}
|
||||
|
||||
- note: in-as-var
|
||||
@@ -151,6 +192,9 @@ cases:
|
||||
package test
|
||||
import future.keywords.if
|
||||
in = 5
|
||||
num_expressions: 6
|
||||
num_queries: 0
|
||||
num_statements: 0
|
||||
|
||||
- note: in-as-var-imported
|
||||
rego: |
|
||||
|
||||
Reference in New Issue
Block a user