mirror of
https://github.com/github/codeql.git
synced 2026-05-02 20:25:13 +02:00
Merge pull request #41 from max-schaefer/interface-embedding
Fix `NamedType.getMethod` to take interface embedding into account.
This commit is contained in:
@@ -786,6 +786,12 @@ var FieldStructsTable = NewTable("fieldstructs",
|
||||
EntityColumn(StructType, "struct"),
|
||||
)
|
||||
|
||||
// MethodHostsTable maps interface methods to the named type they belong to
|
||||
var MethodHostsTable = NewTable("methodhosts",
|
||||
EntityColumn(ObjectType, "method").Unique(),
|
||||
EntityColumn(NamedType, "host"),
|
||||
)
|
||||
|
||||
// DefsTable maps identifiers to the objects they define
|
||||
var DefsTable = NewTable("defs",
|
||||
EntityColumn(IdentExpr, "ident"),
|
||||
|
||||
@@ -1096,7 +1096,8 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label {
|
||||
case *types.Named:
|
||||
kind = dbscheme.NamedType.Index()
|
||||
dbscheme.TypeNameTable.Emit(tw, lbl, tp.Obj().Name())
|
||||
extractUnderlyingType(tw, lbl, tp.Underlying())
|
||||
underlying := tp.Underlying()
|
||||
extractUnderlyingType(tw, lbl, underlying)
|
||||
|
||||
entitylbl, exists := tw.Labeler.LookupObjectID(tp.Obj(), lbl)
|
||||
if entitylbl == trap.InvalidLabel {
|
||||
@@ -1119,6 +1120,19 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label {
|
||||
extractObject(tw, meth, methlbl)
|
||||
}
|
||||
}
|
||||
|
||||
// associate all methods of underlying interface with this type
|
||||
if underlyingInterface, ok := underlying.(*types.Interface); ok {
|
||||
underlyingInterfaceLabel, _ := getTypeLabel(tw, underlyingInterface)
|
||||
for i := 0; i < underlyingInterface.NumMethods(); i++ {
|
||||
meth := underlyingInterface.Method(i)
|
||||
methlbl, exists := tw.Labeler.MethodID(underlyingInterface.Method(i), underlyingInterfaceLabel)
|
||||
if !exists {
|
||||
log.Printf("No label for method %s of type %s yet.", meth.Name(), tp.Obj().Name())
|
||||
}
|
||||
dbscheme.MethodHostsTable.Emit(tw, methlbl, lbl)
|
||||
}
|
||||
}
|
||||
default:
|
||||
log.Fatalf("unexpected type %T", tp)
|
||||
}
|
||||
|
||||
@@ -89,6 +89,8 @@ methodreceivers(unique int method: @object ref, int receiver: @object ref);
|
||||
|
||||
fieldstructs(unique int field: @object ref, int struct: @structtype ref);
|
||||
|
||||
methodhosts(unique int method: @object ref, int host: @namedtype ref);
|
||||
|
||||
defs(int ident: @ident ref, int object: @object ref);
|
||||
|
||||
uses(int ident: @ident ref, int object: @object ref);
|
||||
|
||||
@@ -466,7 +466,7 @@
|
||||
</e>
|
||||
<e>
|
||||
<k>@declvarobject</k>
|
||||
<v>48190</v>
|
||||
<v>48189</v>
|
||||
</e>
|
||||
<e>
|
||||
<k>@declfunctionobject</k>
|
||||
@@ -3695,7 +3695,7 @@
|
||||
</e>
|
||||
<e>
|
||||
<k>simple</k>
|
||||
<v>170</v>
|
||||
<v>169</v>
|
||||
</e>
|
||||
</columnsizes>
|
||||
<dependencies>
|
||||
@@ -3773,12 +3773,12 @@
|
||||
<b>
|
||||
<a>1</a>
|
||||
<b>2</b>
|
||||
<v>152</v>
|
||||
<v>150</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>2</a>
|
||||
<b>3</b>
|
||||
<v>16</v>
|
||||
<v>17</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>5</a>
|
||||
@@ -3799,12 +3799,12 @@
|
||||
<b>
|
||||
<a>1</a>
|
||||
<b>2</b>
|
||||
<v>152</v>
|
||||
<v>150</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>2</a>
|
||||
<b>3</b>
|
||||
<v>16</v>
|
||||
<v>17</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>5</a>
|
||||
@@ -7188,11 +7188,11 @@
|
||||
</relation>
|
||||
<relation>
|
||||
<name>objects</name>
|
||||
<cardinality>80104</cardinality>
|
||||
<cardinality>80103</cardinality>
|
||||
<columnsizes>
|
||||
<e>
|
||||
<k>id</k>
|
||||
<v>80104</v>
|
||||
<v>80103</v>
|
||||
</e>
|
||||
<e>
|
||||
<k>kind</k>
|
||||
@@ -7214,7 +7214,7 @@
|
||||
<b>
|
||||
<a>1</a>
|
||||
<b>2</b>
|
||||
<v>80104</v>
|
||||
<v>80103</v>
|
||||
</b>
|
||||
</bs>
|
||||
</hist>
|
||||
@@ -7230,7 +7230,7 @@
|
||||
<b>
|
||||
<a>1</a>
|
||||
<b>2</b>
|
||||
<v>80104</v>
|
||||
<v>80103</v>
|
||||
</b>
|
||||
</bs>
|
||||
</hist>
|
||||
@@ -7284,8 +7284,8 @@
|
||||
<v>1</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>48190</a>
|
||||
<b>48191</b>
|
||||
<a>48189</a>
|
||||
<b>48190</b>
|
||||
<v>1</v>
|
||||
</b>
|
||||
</bs>
|
||||
@@ -7477,11 +7477,11 @@
|
||||
</relation>
|
||||
<relation>
|
||||
<name>objecttypes</name>
|
||||
<cardinality>80102</cardinality>
|
||||
<cardinality>80101</cardinality>
|
||||
<columnsizes>
|
||||
<e>
|
||||
<k>object</k>
|
||||
<v>80102</v>
|
||||
<v>80101</v>
|
||||
</e>
|
||||
<e>
|
||||
<k>tp</k>
|
||||
@@ -7499,7 +7499,7 @@
|
||||
<b>
|
||||
<a>1</a>
|
||||
<b>2</b>
|
||||
<v>80102</v>
|
||||
<v>80101</v>
|
||||
</b>
|
||||
</bs>
|
||||
</hist>
|
||||
@@ -7598,11 +7598,11 @@
|
||||
</relation>
|
||||
<relation>
|
||||
<name>fieldstructs</name>
|
||||
<cardinality>10267</cardinality>
|
||||
<cardinality>10266</cardinality>
|
||||
<columnsizes>
|
||||
<e>
|
||||
<k>field</k>
|
||||
<v>10267</v>
|
||||
<v>10266</v>
|
||||
</e>
|
||||
<e>
|
||||
<k>struct</k>
|
||||
@@ -7620,7 +7620,7 @@
|
||||
<b>
|
||||
<a>1</a>
|
||||
<b>2</b>
|
||||
<v>10267</v>
|
||||
<v>10266</v>
|
||||
</b>
|
||||
</bs>
|
||||
</hist>
|
||||
@@ -7661,12 +7661,12 @@
|
||||
<b>
|
||||
<a>6</a>
|
||||
<b>8</b>
|
||||
<v>199</v>
|
||||
<v>200</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>8</a>
|
||||
<b>13</b>
|
||||
<v>175</v>
|
||||
<v>174</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>13</a>
|
||||
@@ -7680,6 +7680,89 @@
|
||||
</dependencies>
|
||||
</relation>
|
||||
<relation>
|
||||
<name>methodhosts</name>
|
||||
<cardinality>8700</cardinality>
|
||||
<columnsizes>
|
||||
<e>
|
||||
<k>method</k>
|
||||
<v>8700</v>
|
||||
</e>
|
||||
<e>
|
||||
<k>host</k>
|
||||
<v>1765</v>
|
||||
</e>
|
||||
</columnsizes>
|
||||
<dependencies>
|
||||
<dep>
|
||||
<src>method</src>
|
||||
<trg>host</trg>
|
||||
<val>
|
||||
<hist>
|
||||
<budget>12</budget>
|
||||
<bs>
|
||||
<b>
|
||||
<a>1</a>
|
||||
<b>2</b>
|
||||
<v>8700</v>
|
||||
</b>
|
||||
</bs>
|
||||
</hist>
|
||||
</val>
|
||||
</dep>
|
||||
<dep>
|
||||
<src>host</src>
|
||||
<trg>method</trg>
|
||||
<val>
|
||||
<hist>
|
||||
<budget>12</budget>
|
||||
<bs>
|
||||
<b>
|
||||
<a>1</a>
|
||||
<b>2</b>
|
||||
<v>466</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>2</a>
|
||||
<b>3</b>
|
||||
<v>374</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>3</a>
|
||||
<b>4</b>
|
||||
<v>308</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>4</a>
|
||||
<b>5</b>
|
||||
<v>116</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>5</a>
|
||||
<b>6</b>
|
||||
<v>144</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>6</a>
|
||||
<b>9</b>
|
||||
<v>146</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>9</a>
|
||||
<b>20</b>
|
||||
<v>136</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>20</a>
|
||||
<b>124</b>
|
||||
<v>75</v>
|
||||
</b>
|
||||
</bs>
|
||||
</hist>
|
||||
</val>
|
||||
</dep>
|
||||
</dependencies>
|
||||
</relation>
|
||||
<relation>
|
||||
<name>defs</name>
|
||||
<cardinality>38467</cardinality>
|
||||
<columnsizes>
|
||||
@@ -8263,7 +8346,7 @@
|
||||
</relation>
|
||||
<relation>
|
||||
<name>component_types</name>
|
||||
<cardinality>34045</cardinality>
|
||||
<cardinality>34044</cardinality>
|
||||
<columnsizes>
|
||||
<e>
|
||||
<k>parent</k>
|
||||
@@ -8516,7 +8599,7 @@
|
||||
</b>
|
||||
<b>
|
||||
<a>215</a>
|
||||
<b>755</b>
|
||||
<b>756</b>
|
||||
<v>6</v>
|
||||
</b>
|
||||
<b>
|
||||
@@ -8614,12 +8697,12 @@
|
||||
<b>
|
||||
<a>3</a>
|
||||
<b>5</b>
|
||||
<v>397</v>
|
||||
<v>398</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>5</a>
|
||||
<b>8392</b>
|
||||
<v>314</v>
|
||||
<v>313</v>
|
||||
</b>
|
||||
</bs>
|
||||
</hist>
|
||||
@@ -8635,22 +8718,22 @@
|
||||
<b>
|
||||
<a>1</a>
|
||||
<b>2</b>
|
||||
<v>4007</v>
|
||||
<v>4004</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>2</a>
|
||||
<b>3</b>
|
||||
<v>675</v>
|
||||
<v>678</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>3</a>
|
||||
<b>6</b>
|
||||
<v>405</v>
|
||||
<v>404</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>6</a>
|
||||
<b>28</b>
|
||||
<v>75</v>
|
||||
<v>76</v>
|
||||
</b>
|
||||
</bs>
|
||||
</hist>
|
||||
@@ -8753,12 +8836,12 @@
|
||||
<b>
|
||||
<a>4</a>
|
||||
<b>5</b>
|
||||
<v>331</v>
|
||||
<v>332</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>5</a>
|
||||
<b>10</b>
|
||||
<v>319</v>
|
||||
<v>318</v>
|
||||
</b>
|
||||
<b>
|
||||
<a>10</a>
|
||||
|
||||
@@ -575,6 +575,13 @@ class NamedType extends @namedtype, CompositeType {
|
||||
/** Gets the type which this type is defined to be. */
|
||||
Type getBaseType() { underlying_type(this, result) }
|
||||
|
||||
override Method getMethod(string m) {
|
||||
result = CompositeType.super.getMethod(m)
|
||||
or
|
||||
methodhosts(result, this) and
|
||||
result.getName() = m
|
||||
}
|
||||
|
||||
override Type getUnderlyingType() { result = getBaseType().getUnderlyingType() }
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
| * Foo | 1 |
|
||||
| A | 1 |
|
||||
| A2 | 1 |
|
||||
| AC | 3 |
|
||||
| AEmbedded | 1 |
|
||||
| AExtended | 2 |
|
||||
| B | 2 |
|
||||
| C | 2 |
|
||||
| Foo | 1 |
|
||||
5
ql/test/library-tests/semmle/go/Types/MethodCount.ql
Normal file
5
ql/test/library-tests/semmle/go/Types/MethodCount.ql
Normal file
@@ -0,0 +1,5 @@
|
||||
import go
|
||||
|
||||
from Type t
|
||||
where t.getPackage().getName().regexpMatch("main|pkg1|pkg2")
|
||||
select t.pp(), strictcount(t.getMethod(_))
|
||||
15
ql/test/library-tests/semmle/go/Types/MethodTypes.expected
Normal file
15
ql/test/library-tests/semmle/go/Types/MethodTypes.expected
Normal file
@@ -0,0 +1,15 @@
|
||||
| A | m | func() |
|
||||
| A2 | m | func() |
|
||||
| AC | m | func() |
|
||||
| AC | n | func() |
|
||||
| AC | o | func() |
|
||||
| AEmbedded | m | func() |
|
||||
| AExtended | m | func() |
|
||||
| AExtended | n | func() |
|
||||
| B | m | func() |
|
||||
| B | n | func() |
|
||||
| C | n | func() |
|
||||
| C | o | func() |
|
||||
| T | half | func() Foo |
|
||||
| T3 | half | func() Foo |
|
||||
| T4 | half | func() Foo |
|
||||
7
ql/test/library-tests/semmle/go/Types/MethodTypes.ql
Normal file
7
ql/test/library-tests/semmle/go/Types/MethodTypes.ql
Normal file
@@ -0,0 +1,7 @@
|
||||
import go
|
||||
|
||||
from NamedType t, string m, Type tp
|
||||
where
|
||||
exists(t.getEntity().getDeclaration()) and
|
||||
t.getBaseType().hasMethod(m, tp)
|
||||
select t, m, tp.pp()
|
||||
@@ -1,3 +1,14 @@
|
||||
| T | half | func() Foo |
|
||||
| T3 | half | func() Foo |
|
||||
| T4 | half | func() Foo |
|
||||
| * Foo | half | pkg1/tst.go:33:16:33:19 | half |
|
||||
| A | m | pkg1/interfaces.go:4:2:4:2 | m |
|
||||
| A2 | m | pkg1/interfaces.go:32:2:32:2 | m |
|
||||
| AC | m | pkg1/interfaces.go:4:2:4:2 | m |
|
||||
| AC | n | pkg1/interfaces.go:13:2:13:2 | n |
|
||||
| AC | o | pkg1/interfaces.go:14:2:14:2 | o |
|
||||
| AEmbedded | m | pkg1/interfaces.go:4:2:4:2 | m |
|
||||
| AExtended | m | pkg1/interfaces.go:4:2:4:2 | m |
|
||||
| AExtended | n | pkg1/interfaces.go:28:2:28:2 | n |
|
||||
| B | m | pkg1/interfaces.go:8:2:8:2 | m |
|
||||
| B | n | pkg1/interfaces.go:9:2:9:2 | n |
|
||||
| C | n | pkg1/interfaces.go:13:2:13:2 | n |
|
||||
| C | o | pkg1/interfaces.go:14:2:14:2 | o |
|
||||
| Foo | half | pkg1/tst.go:33:16:33:19 | half |
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import go
|
||||
|
||||
from NamedType t, string m, Type tp
|
||||
where
|
||||
exists(t.getEntity().getDeclaration()) and
|
||||
t.getBaseType().hasMethod(m, tp)
|
||||
select t, m, tp.pp()
|
||||
from Type t, string m
|
||||
where t.getPackage().getName().regexpMatch("main|pkg1|pkg2")
|
||||
select t.pp(), m, t.getMethod(m)
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
| A | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.A |
|
||||
| A2 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.A2 |
|
||||
| AC | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.AC |
|
||||
| AEmbedded | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.AEmbedded |
|
||||
| AExtended | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.AExtended |
|
||||
| B | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.B |
|
||||
| Bar | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.Bar |
|
||||
| C | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.C |
|
||||
| Foo | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.Foo |
|
||||
| G | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2.G |
|
||||
| T | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.T |
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
| A | A |
|
||||
| A2 | A2 |
|
||||
| AC | AC |
|
||||
| AEmbedded | AEmbedded |
|
||||
| AExtended | AExtended |
|
||||
| B | B |
|
||||
| Bar | Bar |
|
||||
| C | C |
|
||||
| Foo | Foo |
|
||||
| G | G |
|
||||
| T | T |
|
||||
|
||||
33
ql/test/library-tests/semmle/go/Types/pkg1/interfaces.go
Normal file
33
ql/test/library-tests/semmle/go/Types/pkg1/interfaces.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package pkg1
|
||||
|
||||
type A interface {
|
||||
m()
|
||||
}
|
||||
|
||||
type B interface {
|
||||
m()
|
||||
n()
|
||||
}
|
||||
|
||||
type C interface {
|
||||
n()
|
||||
o()
|
||||
}
|
||||
|
||||
type AEmbedded interface {
|
||||
A
|
||||
}
|
||||
|
||||
type AC interface {
|
||||
A
|
||||
C
|
||||
}
|
||||
|
||||
type AExtended interface {
|
||||
A
|
||||
n()
|
||||
}
|
||||
|
||||
type A2 interface {
|
||||
m()
|
||||
}
|
||||
404
upgrades/ffced433fce33521f90c1b6c66b611902cdceac2/go.dbscheme
Normal file
404
upgrades/ffced433fce33521f90c1b6c66b611902cdceac2/go.dbscheme
Normal file
@@ -0,0 +1,404 @@
|
||||
/** Auto-generated dbscheme; do not edit. */
|
||||
|
||||
|
||||
/** Duplicate code **/
|
||||
|
||||
duplicateCode(
|
||||
unique int id : @duplication,
|
||||
varchar(900) relativePath : string ref,
|
||||
int equivClass : int ref);
|
||||
|
||||
similarCode(
|
||||
unique int id : @similarity,
|
||||
varchar(900) relativePath : string ref,
|
||||
int equivClass : int ref);
|
||||
|
||||
@duplication_or_similarity = @duplication | @similarity;
|
||||
|
||||
tokens(
|
||||
int id : @duplication_or_similarity ref,
|
||||
int offset : int ref,
|
||||
int beginLine : int ref,
|
||||
int beginColumn : int ref,
|
||||
int endLine : int ref,
|
||||
int endColumn : int ref);
|
||||
|
||||
/** External data **/
|
||||
|
||||
externalData(
|
||||
int id : @externalDataElement,
|
||||
varchar(900) path : string ref,
|
||||
int column: int ref,
|
||||
varchar(900) value : string ref
|
||||
);
|
||||
|
||||
snapshotDate(unique date snapshotDate : date ref);
|
||||
|
||||
sourceLocationPrefix(varchar(900) prefix : string ref);
|
||||
|
||||
locations_default(unique int id: @location_default, int file: @file ref, int beginLine: int ref, int beginColumn: int ref,
|
||||
int endLine: int ref, int endColumn: int ref);
|
||||
|
||||
numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref);
|
||||
|
||||
files(unique int id: @file, string name: string ref, string simple: string ref, string ext: string ref, int fromSource: int ref);
|
||||
|
||||
folders(unique int id: @folder, string name: string ref, string simple: string ref);
|
||||
|
||||
containerparent(int parent: @container ref, unique int child: @container ref);
|
||||
|
||||
has_location(unique int locatable: @locatable ref, int location: @location ref);
|
||||
|
||||
comment_groups(unique int id: @comment_group);
|
||||
|
||||
comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref);
|
||||
|
||||
doc_comments(unique int node: @documentable ref, int comment: @comment_group ref);
|
||||
|
||||
#keyset[parent, idx]
|
||||
exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref);
|
||||
|
||||
literals(unique int expr: @expr ref, string value: string ref, string raw: string ref);
|
||||
|
||||
constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref);
|
||||
|
||||
fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref);
|
||||
|
||||
#keyset[parent, idx]
|
||||
stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref);
|
||||
|
||||
#keyset[parent, idx]
|
||||
decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref);
|
||||
|
||||
#keyset[parent, idx]
|
||||
specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref);
|
||||
|
||||
scopes(unique int id: @scope, int kind: int ref);
|
||||
|
||||
scopenesting(unique int inner: @scope ref, int outer: @scope ref);
|
||||
|
||||
scopenodes(unique int node: @scopenode ref, int scope: @localscope ref);
|
||||
|
||||
objects(unique int id: @object, int kind: int ref, string name: string ref);
|
||||
|
||||
objectscopes(unique int object: @object ref, int scope: @scope ref);
|
||||
|
||||
objecttypes(unique int object: @object ref, int tp: @type ref);
|
||||
|
||||
methodreceivers(unique int method: @object ref, int receiver: @object ref);
|
||||
|
||||
fieldstructs(unique int field: @object ref, int struct: @structtype ref);
|
||||
|
||||
methodhosts(unique int method: @object ref, int host: @namedtype ref);
|
||||
|
||||
defs(int ident: @ident ref, int object: @object ref);
|
||||
|
||||
uses(int ident: @ident ref, int object: @object ref);
|
||||
|
||||
types(unique int id: @type, int kind: int ref);
|
||||
|
||||
type_of(unique int expr: @expr ref, int tp: @type ref);
|
||||
|
||||
typename(unique int tp: @type ref, string name: string ref);
|
||||
|
||||
key_type(unique int map: @maptype ref, int tp: @type ref);
|
||||
|
||||
element_type(unique int container: @containertype ref, int tp: @type ref);
|
||||
|
||||
base_type(unique int ptr: @pointertype ref, int tp: @type ref);
|
||||
|
||||
underlying_type(unique int named: @namedtype ref, int tp: @type ref);
|
||||
|
||||
#keyset[parent, index]
|
||||
component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref);
|
||||
|
||||
array_length(unique int tp: @arraytype ref, string len: string ref);
|
||||
|
||||
type_objects(unique int tp: @type ref, int object: @object ref);
|
||||
|
||||
packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref);
|
||||
|
||||
@container = @file | @folder;
|
||||
|
||||
@locatable = @node | @localscope;
|
||||
|
||||
@node = @documentable | @exprparent | @fieldparent | @stmtparent | @declparent | @scopenode | @comment_group | @comment;
|
||||
|
||||
@documentable = @file | @field | @spec | @gendecl | @funcdecl;
|
||||
|
||||
@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @spec;
|
||||
|
||||
@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr;
|
||||
|
||||
@stmtparent = @funcdef | @stmt | @decl;
|
||||
|
||||
@declparent = @file | @declstmt;
|
||||
|
||||
@funcdef = @funclit | @funcdecl;
|
||||
|
||||
@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt;
|
||||
|
||||
@location = @location_default;
|
||||
|
||||
@sourceline = @locatable;
|
||||
|
||||
case @comment.kind of
|
||||
0 = @slashslashcomment
|
||||
| 1 = @slashstarcomment;
|
||||
|
||||
case @expr.kind of
|
||||
0 = @badexpr
|
||||
| 1 = @ident
|
||||
| 2 = @ellipsis
|
||||
| 3 = @intlit
|
||||
| 4 = @floatlit
|
||||
| 5 = @imaglit
|
||||
| 6 = @charlit
|
||||
| 7 = @stringlit
|
||||
| 8 = @funclit
|
||||
| 9 = @compositelit
|
||||
| 10 = @parenexpr
|
||||
| 11 = @selectorexpr
|
||||
| 12 = @indexexpr
|
||||
| 13 = @sliceexpr
|
||||
| 14 = @typeassertexpr
|
||||
| 15 = @callorconversionexpr
|
||||
| 16 = @starexpr
|
||||
| 17 = @keyvalueexpr
|
||||
| 18 = @arraytypeexpr
|
||||
| 19 = @structtypeexpr
|
||||
| 20 = @functypeexpr
|
||||
| 21 = @interfacetypeexpr
|
||||
| 22 = @maptypeexpr
|
||||
| 23 = @plusexpr
|
||||
| 24 = @minusexpr
|
||||
| 25 = @notexpr
|
||||
| 26 = @complementexpr
|
||||
| 27 = @derefexpr
|
||||
| 28 = @addressexpr
|
||||
| 29 = @arrowexpr
|
||||
| 30 = @lorexpr
|
||||
| 31 = @landexpr
|
||||
| 32 = @eqlexpr
|
||||
| 33 = @neqexpr
|
||||
| 34 = @lssexpr
|
||||
| 35 = @leqexpr
|
||||
| 36 = @gtrexpr
|
||||
| 37 = @geqexpr
|
||||
| 38 = @addexpr
|
||||
| 39 = @subexpr
|
||||
| 40 = @orexpr
|
||||
| 41 = @xorexpr
|
||||
| 42 = @mulexpr
|
||||
| 43 = @quoexpr
|
||||
| 44 = @remexpr
|
||||
| 45 = @shlexpr
|
||||
| 46 = @shrexpr
|
||||
| 47 = @andexpr
|
||||
| 48 = @andnotexpr
|
||||
| 49 = @sendchantypeexpr
|
||||
| 50 = @recvchantypeexpr
|
||||
| 51 = @sendrcvchantypeexpr;
|
||||
|
||||
@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit;
|
||||
|
||||
@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr;
|
||||
|
||||
@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr;
|
||||
|
||||
@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr;
|
||||
|
||||
@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr;
|
||||
|
||||
@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr;
|
||||
|
||||
@logicalunaryexpr = @notexpr;
|
||||
|
||||
@bitwiseunaryexpr = @complementexpr;
|
||||
|
||||
@arithmeticunaryexpr = @plusexpr | @minusexpr;
|
||||
|
||||
@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison;
|
||||
|
||||
@logicalbinaryexpr = @lorexpr | @landexpr;
|
||||
|
||||
@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr;
|
||||
|
||||
@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr;
|
||||
|
||||
@shiftexpr = @shlexpr | @shrexpr;
|
||||
|
||||
@comparison = @equalitytest | @relationalcomparison;
|
||||
|
||||
@equalitytest = @eqlexpr | @neqexpr;
|
||||
|
||||
@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr;
|
||||
|
||||
@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr;
|
||||
|
||||
case @stmt.kind of
|
||||
0 = @badstmt
|
||||
| 1 = @declstmt
|
||||
| 2 = @emptystmt
|
||||
| 3 = @labeledstmt
|
||||
| 4 = @exprstmt
|
||||
| 5 = @sendstmt
|
||||
| 6 = @incstmt
|
||||
| 7 = @decstmt
|
||||
| 8 = @gostmt
|
||||
| 9 = @deferstmt
|
||||
| 10 = @returnstmt
|
||||
| 11 = @breakstmt
|
||||
| 12 = @continuestmt
|
||||
| 13 = @gotostmt
|
||||
| 14 = @fallthroughstmt
|
||||
| 15 = @blockstmt
|
||||
| 16 = @ifstmt
|
||||
| 17 = @caseclause
|
||||
| 18 = @exprswitchstmt
|
||||
| 19 = @typeswitchstmt
|
||||
| 20 = @commclause
|
||||
| 21 = @selectstmt
|
||||
| 22 = @forstmt
|
||||
| 23 = @rangestmt
|
||||
| 24 = @assignstmt
|
||||
| 25 = @definestmt
|
||||
| 26 = @addassignstmt
|
||||
| 27 = @subassignstmt
|
||||
| 28 = @mulassignstmt
|
||||
| 29 = @quoassignstmt
|
||||
| 30 = @remassignstmt
|
||||
| 31 = @andassignstmt
|
||||
| 32 = @orassignstmt
|
||||
| 33 = @xorassignstmt
|
||||
| 34 = @shlassignstmt
|
||||
| 35 = @shrassignstmt
|
||||
| 36 = @andnotassignstmt;
|
||||
|
||||
@incdecstmt = @incstmt | @decstmt;
|
||||
|
||||
@assignment = @simpleassignstmt | @compoundassignstmt;
|
||||
|
||||
@simpleassignstmt = @assignstmt | @definestmt;
|
||||
|
||||
@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt
|
||||
| @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt;
|
||||
|
||||
@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt;
|
||||
|
||||
@switchstmt = @exprswitchstmt | @typeswitchstmt;
|
||||
|
||||
@loopstmt = @forstmt | @rangestmt;
|
||||
|
||||
case @decl.kind of
|
||||
0 = @baddecl
|
||||
| 1 = @importdecl
|
||||
| 2 = @constdecl
|
||||
| 3 = @typedecl
|
||||
| 4 = @vardecl
|
||||
| 5 = @funcdecl;
|
||||
|
||||
@gendecl = @importdecl | @constdecl | @typedecl | @vardecl;
|
||||
|
||||
case @spec.kind of
|
||||
0 = @importspec
|
||||
| 1 = @valuespec
|
||||
| 2 = @typespec;
|
||||
|
||||
case @object.kind of
|
||||
0 = @pkgobject
|
||||
| 1 = @decltypeobject
|
||||
| 2 = @builtintypeobject
|
||||
| 3 = @declconstobject
|
||||
| 4 = @builtinconstobject
|
||||
| 5 = @declvarobject
|
||||
| 6 = @declfunctionobject
|
||||
| 7 = @builtinfunctionobject
|
||||
| 8 = @labelobject;
|
||||
|
||||
@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject;
|
||||
|
||||
@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject;
|
||||
|
||||
@typeobject = @decltypeobject | @builtintypeobject;
|
||||
|
||||
@valueobject = @constobject | @varobject | @functionobject;
|
||||
|
||||
@constobject = @declconstobject | @builtinconstobject;
|
||||
|
||||
@varobject = @declvarobject;
|
||||
|
||||
@functionobject = @declfunctionobject | @builtinfunctionobject;
|
||||
|
||||
case @scope.kind of
|
||||
0 = @universescope
|
||||
| 1 = @packagescope
|
||||
| 2 = @localscope;
|
||||
|
||||
case @type.kind of
|
||||
0 = @invalidtype
|
||||
| 1 = @boolexprtype
|
||||
| 2 = @inttype
|
||||
| 3 = @int8type
|
||||
| 4 = @int16type
|
||||
| 5 = @int32type
|
||||
| 6 = @int64type
|
||||
| 7 = @uinttype
|
||||
| 8 = @uint8type
|
||||
| 9 = @uint16type
|
||||
| 10 = @uint32type
|
||||
| 11 = @uint64type
|
||||
| 12 = @uintptrtype
|
||||
| 13 = @float32type
|
||||
| 14 = @float64type
|
||||
| 15 = @complex64type
|
||||
| 16 = @complex128type
|
||||
| 17 = @stringexprtype
|
||||
| 18 = @unsafepointertype
|
||||
| 19 = @boolliteraltype
|
||||
| 20 = @intliteraltype
|
||||
| 21 = @runeliteraltype
|
||||
| 22 = @floatliteraltype
|
||||
| 23 = @complexliteraltype
|
||||
| 24 = @stringliteraltype
|
||||
| 25 = @nilliteraltype
|
||||
| 26 = @arraytype
|
||||
| 27 = @slicetype
|
||||
| 28 = @structtype
|
||||
| 29 = @pointertype
|
||||
| 30 = @interfacetype
|
||||
| 31 = @tupletype
|
||||
| 32 = @signaturetype
|
||||
| 33 = @maptype
|
||||
| 34 = @sendchantype
|
||||
| 35 = @recvchantype
|
||||
| 36 = @sendrcvchantype
|
||||
| 37 = @namedtype;
|
||||
|
||||
@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @uintptrtype | @unsafepointertype;
|
||||
|
||||
@booltype = @boolexprtype | @boolliteraltype;
|
||||
|
||||
@numerictype = @integertype | @floattype | @complextype;
|
||||
|
||||
@integertype = @signedintegertype | @unsignedintegertype;
|
||||
|
||||
@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype;
|
||||
|
||||
@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type;
|
||||
|
||||
@floattype = @float32type | @float64type | @floatliteraltype;
|
||||
|
||||
@complextype = @complex64type | @complex128type | @complexliteraltype;
|
||||
|
||||
@stringtype = @stringexprtype | @stringliteraltype;
|
||||
|
||||
@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype
|
||||
| @stringliteraltype | @nilliteraltype;
|
||||
|
||||
@compositetype = @containertype | @structtype | @pointertype | @interfacetype | @tupletype | @signaturetype | @namedtype;
|
||||
|
||||
@containertype = @arraytype | @slicetype | @maptype | @chantype;
|
||||
|
||||
@chantype = @sendchantype | @recvchantype | @sendrcvchantype;
|
||||
|
||||
402
upgrades/ffced433fce33521f90c1b6c66b611902cdceac2/old.dbscheme
Normal file
402
upgrades/ffced433fce33521f90c1b6c66b611902cdceac2/old.dbscheme
Normal file
@@ -0,0 +1,402 @@
|
||||
/** Auto-generated dbscheme; do not edit. */
|
||||
|
||||
|
||||
/** Duplicate code **/
|
||||
|
||||
duplicateCode(
|
||||
unique int id : @duplication,
|
||||
varchar(900) relativePath : string ref,
|
||||
int equivClass : int ref);
|
||||
|
||||
similarCode(
|
||||
unique int id : @similarity,
|
||||
varchar(900) relativePath : string ref,
|
||||
int equivClass : int ref);
|
||||
|
||||
@duplication_or_similarity = @duplication | @similarity;
|
||||
|
||||
tokens(
|
||||
int id : @duplication_or_similarity ref,
|
||||
int offset : int ref,
|
||||
int beginLine : int ref,
|
||||
int beginColumn : int ref,
|
||||
int endLine : int ref,
|
||||
int endColumn : int ref);
|
||||
|
||||
/** External data **/
|
||||
|
||||
externalData(
|
||||
int id : @externalDataElement,
|
||||
varchar(900) path : string ref,
|
||||
int column: int ref,
|
||||
varchar(900) value : string ref
|
||||
);
|
||||
|
||||
snapshotDate(unique date snapshotDate : date ref);
|
||||
|
||||
sourceLocationPrefix(varchar(900) prefix : string ref);
|
||||
|
||||
locations_default(unique int id: @location_default, int file: @file ref, int beginLine: int ref, int beginColumn: int ref,
|
||||
int endLine: int ref, int endColumn: int ref);
|
||||
|
||||
numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref);
|
||||
|
||||
files(unique int id: @file, string name: string ref, string simple: string ref, string ext: string ref, int fromSource: int ref);
|
||||
|
||||
folders(unique int id: @folder, string name: string ref, string simple: string ref);
|
||||
|
||||
containerparent(int parent: @container ref, unique int child: @container ref);
|
||||
|
||||
has_location(unique int locatable: @locatable ref, int location: @location ref);
|
||||
|
||||
comment_groups(unique int id: @comment_group);
|
||||
|
||||
comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref);
|
||||
|
||||
doc_comments(unique int node: @documentable ref, int comment: @comment_group ref);
|
||||
|
||||
#keyset[parent, idx]
|
||||
exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref);
|
||||
|
||||
literals(unique int expr: @expr ref, string value: string ref, string raw: string ref);
|
||||
|
||||
constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref);
|
||||
|
||||
fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref);
|
||||
|
||||
#keyset[parent, idx]
|
||||
stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref);
|
||||
|
||||
#keyset[parent, idx]
|
||||
decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref);
|
||||
|
||||
#keyset[parent, idx]
|
||||
specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref);
|
||||
|
||||
scopes(unique int id: @scope, int kind: int ref);
|
||||
|
||||
scopenesting(unique int inner: @scope ref, int outer: @scope ref);
|
||||
|
||||
scopenodes(unique int node: @scopenode ref, int scope: @localscope ref);
|
||||
|
||||
objects(unique int id: @object, int kind: int ref, string name: string ref);
|
||||
|
||||
objectscopes(unique int object: @object ref, int scope: @scope ref);
|
||||
|
||||
objecttypes(unique int object: @object ref, int tp: @type ref);
|
||||
|
||||
methodreceivers(unique int method: @object ref, int receiver: @object ref);
|
||||
|
||||
fieldstructs(unique int field: @object ref, int struct: @structtype ref);
|
||||
|
||||
defs(int ident: @ident ref, int object: @object ref);
|
||||
|
||||
uses(int ident: @ident ref, int object: @object ref);
|
||||
|
||||
types(unique int id: @type, int kind: int ref);
|
||||
|
||||
type_of(unique int expr: @expr ref, int tp: @type ref);
|
||||
|
||||
typename(unique int tp: @type ref, string name: string ref);
|
||||
|
||||
key_type(unique int map: @maptype ref, int tp: @type ref);
|
||||
|
||||
element_type(unique int container: @containertype ref, int tp: @type ref);
|
||||
|
||||
base_type(unique int ptr: @pointertype ref, int tp: @type ref);
|
||||
|
||||
underlying_type(unique int named: @namedtype ref, int tp: @type ref);
|
||||
|
||||
#keyset[parent, index]
|
||||
component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref);
|
||||
|
||||
array_length(unique int tp: @arraytype ref, string len: string ref);
|
||||
|
||||
type_objects(unique int tp: @type ref, int object: @object ref);
|
||||
|
||||
packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref);
|
||||
|
||||
@container = @file | @folder;
|
||||
|
||||
@locatable = @node | @localscope;
|
||||
|
||||
@node = @documentable | @exprparent | @fieldparent | @stmtparent | @declparent | @scopenode | @comment_group | @comment;
|
||||
|
||||
@documentable = @file | @field | @spec | @gendecl | @funcdecl;
|
||||
|
||||
@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @spec;
|
||||
|
||||
@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr;
|
||||
|
||||
@stmtparent = @funcdef | @stmt | @decl;
|
||||
|
||||
@declparent = @file | @declstmt;
|
||||
|
||||
@funcdef = @funclit | @funcdecl;
|
||||
|
||||
@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt;
|
||||
|
||||
@location = @location_default;
|
||||
|
||||
@sourceline = @locatable;
|
||||
|
||||
case @comment.kind of
|
||||
0 = @slashslashcomment
|
||||
| 1 = @slashstarcomment;
|
||||
|
||||
case @expr.kind of
|
||||
0 = @badexpr
|
||||
| 1 = @ident
|
||||
| 2 = @ellipsis
|
||||
| 3 = @intlit
|
||||
| 4 = @floatlit
|
||||
| 5 = @imaglit
|
||||
| 6 = @charlit
|
||||
| 7 = @stringlit
|
||||
| 8 = @funclit
|
||||
| 9 = @compositelit
|
||||
| 10 = @parenexpr
|
||||
| 11 = @selectorexpr
|
||||
| 12 = @indexexpr
|
||||
| 13 = @sliceexpr
|
||||
| 14 = @typeassertexpr
|
||||
| 15 = @callorconversionexpr
|
||||
| 16 = @starexpr
|
||||
| 17 = @keyvalueexpr
|
||||
| 18 = @arraytypeexpr
|
||||
| 19 = @structtypeexpr
|
||||
| 20 = @functypeexpr
|
||||
| 21 = @interfacetypeexpr
|
||||
| 22 = @maptypeexpr
|
||||
| 23 = @plusexpr
|
||||
| 24 = @minusexpr
|
||||
| 25 = @notexpr
|
||||
| 26 = @complementexpr
|
||||
| 27 = @derefexpr
|
||||
| 28 = @addressexpr
|
||||
| 29 = @arrowexpr
|
||||
| 30 = @lorexpr
|
||||
| 31 = @landexpr
|
||||
| 32 = @eqlexpr
|
||||
| 33 = @neqexpr
|
||||
| 34 = @lssexpr
|
||||
| 35 = @leqexpr
|
||||
| 36 = @gtrexpr
|
||||
| 37 = @geqexpr
|
||||
| 38 = @addexpr
|
||||
| 39 = @subexpr
|
||||
| 40 = @orexpr
|
||||
| 41 = @xorexpr
|
||||
| 42 = @mulexpr
|
||||
| 43 = @quoexpr
|
||||
| 44 = @remexpr
|
||||
| 45 = @shlexpr
|
||||
| 46 = @shrexpr
|
||||
| 47 = @andexpr
|
||||
| 48 = @andnotexpr
|
||||
| 49 = @sendchantypeexpr
|
||||
| 50 = @recvchantypeexpr
|
||||
| 51 = @sendrcvchantypeexpr;
|
||||
|
||||
@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit;
|
||||
|
||||
@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr;
|
||||
|
||||
@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr;
|
||||
|
||||
@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr;
|
||||
|
||||
@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr;
|
||||
|
||||
@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr;
|
||||
|
||||
@logicalunaryexpr = @notexpr;
|
||||
|
||||
@bitwiseunaryexpr = @complementexpr;
|
||||
|
||||
@arithmeticunaryexpr = @plusexpr | @minusexpr;
|
||||
|
||||
@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison;
|
||||
|
||||
@logicalbinaryexpr = @lorexpr | @landexpr;
|
||||
|
||||
@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr;
|
||||
|
||||
@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr;
|
||||
|
||||
@shiftexpr = @shlexpr | @shrexpr;
|
||||
|
||||
@comparison = @equalitytest | @relationalcomparison;
|
||||
|
||||
@equalitytest = @eqlexpr | @neqexpr;
|
||||
|
||||
@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr;
|
||||
|
||||
@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr;
|
||||
|
||||
case @stmt.kind of
|
||||
0 = @badstmt
|
||||
| 1 = @declstmt
|
||||
| 2 = @emptystmt
|
||||
| 3 = @labeledstmt
|
||||
| 4 = @exprstmt
|
||||
| 5 = @sendstmt
|
||||
| 6 = @incstmt
|
||||
| 7 = @decstmt
|
||||
| 8 = @gostmt
|
||||
| 9 = @deferstmt
|
||||
| 10 = @returnstmt
|
||||
| 11 = @breakstmt
|
||||
| 12 = @continuestmt
|
||||
| 13 = @gotostmt
|
||||
| 14 = @fallthroughstmt
|
||||
| 15 = @blockstmt
|
||||
| 16 = @ifstmt
|
||||
| 17 = @caseclause
|
||||
| 18 = @exprswitchstmt
|
||||
| 19 = @typeswitchstmt
|
||||
| 20 = @commclause
|
||||
| 21 = @selectstmt
|
||||
| 22 = @forstmt
|
||||
| 23 = @rangestmt
|
||||
| 24 = @assignstmt
|
||||
| 25 = @definestmt
|
||||
| 26 = @addassignstmt
|
||||
| 27 = @subassignstmt
|
||||
| 28 = @mulassignstmt
|
||||
| 29 = @quoassignstmt
|
||||
| 30 = @remassignstmt
|
||||
| 31 = @andassignstmt
|
||||
| 32 = @orassignstmt
|
||||
| 33 = @xorassignstmt
|
||||
| 34 = @shlassignstmt
|
||||
| 35 = @shrassignstmt
|
||||
| 36 = @andnotassignstmt;
|
||||
|
||||
@incdecstmt = @incstmt | @decstmt;
|
||||
|
||||
@assignment = @simpleassignstmt | @compoundassignstmt;
|
||||
|
||||
@simpleassignstmt = @assignstmt | @definestmt;
|
||||
|
||||
@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt
|
||||
| @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt;
|
||||
|
||||
@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt;
|
||||
|
||||
@switchstmt = @exprswitchstmt | @typeswitchstmt;
|
||||
|
||||
@loopstmt = @forstmt | @rangestmt;
|
||||
|
||||
case @decl.kind of
|
||||
0 = @baddecl
|
||||
| 1 = @importdecl
|
||||
| 2 = @constdecl
|
||||
| 3 = @typedecl
|
||||
| 4 = @vardecl
|
||||
| 5 = @funcdecl;
|
||||
|
||||
@gendecl = @importdecl | @constdecl | @typedecl | @vardecl;
|
||||
|
||||
case @spec.kind of
|
||||
0 = @importspec
|
||||
| 1 = @valuespec
|
||||
| 2 = @typespec;
|
||||
|
||||
case @object.kind of
|
||||
0 = @pkgobject
|
||||
| 1 = @decltypeobject
|
||||
| 2 = @builtintypeobject
|
||||
| 3 = @declconstobject
|
||||
| 4 = @builtinconstobject
|
||||
| 5 = @declvarobject
|
||||
| 6 = @declfunctionobject
|
||||
| 7 = @builtinfunctionobject
|
||||
| 8 = @labelobject;
|
||||
|
||||
@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject;
|
||||
|
||||
@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject;
|
||||
|
||||
@typeobject = @decltypeobject | @builtintypeobject;
|
||||
|
||||
@valueobject = @constobject | @varobject | @functionobject;
|
||||
|
||||
@constobject = @declconstobject | @builtinconstobject;
|
||||
|
||||
@varobject = @declvarobject;
|
||||
|
||||
@functionobject = @declfunctionobject | @builtinfunctionobject;
|
||||
|
||||
case @scope.kind of
|
||||
0 = @universescope
|
||||
| 1 = @packagescope
|
||||
| 2 = @localscope;
|
||||
|
||||
case @type.kind of
|
||||
0 = @invalidtype
|
||||
| 1 = @boolexprtype
|
||||
| 2 = @inttype
|
||||
| 3 = @int8type
|
||||
| 4 = @int16type
|
||||
| 5 = @int32type
|
||||
| 6 = @int64type
|
||||
| 7 = @uinttype
|
||||
| 8 = @uint8type
|
||||
| 9 = @uint16type
|
||||
| 10 = @uint32type
|
||||
| 11 = @uint64type
|
||||
| 12 = @uintptrtype
|
||||
| 13 = @float32type
|
||||
| 14 = @float64type
|
||||
| 15 = @complex64type
|
||||
| 16 = @complex128type
|
||||
| 17 = @stringexprtype
|
||||
| 18 = @unsafepointertype
|
||||
| 19 = @boolliteraltype
|
||||
| 20 = @intliteraltype
|
||||
| 21 = @runeliteraltype
|
||||
| 22 = @floatliteraltype
|
||||
| 23 = @complexliteraltype
|
||||
| 24 = @stringliteraltype
|
||||
| 25 = @nilliteraltype
|
||||
| 26 = @arraytype
|
||||
| 27 = @slicetype
|
||||
| 28 = @structtype
|
||||
| 29 = @pointertype
|
||||
| 30 = @interfacetype
|
||||
| 31 = @tupletype
|
||||
| 32 = @signaturetype
|
||||
| 33 = @maptype
|
||||
| 34 = @sendchantype
|
||||
| 35 = @recvchantype
|
||||
| 36 = @sendrcvchantype
|
||||
| 37 = @namedtype;
|
||||
|
||||
@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @uintptrtype | @unsafepointertype;
|
||||
|
||||
@booltype = @boolexprtype | @boolliteraltype;
|
||||
|
||||
@numerictype = @integertype | @floattype | @complextype;
|
||||
|
||||
@integertype = @signedintegertype | @unsignedintegertype;
|
||||
|
||||
@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype;
|
||||
|
||||
@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type;
|
||||
|
||||
@floattype = @float32type | @float64type | @floatliteraltype;
|
||||
|
||||
@complextype = @complex64type | @complex128type | @complexliteraltype;
|
||||
|
||||
@stringtype = @stringexprtype | @stringliteraltype;
|
||||
|
||||
@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype
|
||||
| @stringliteraltype | @nilliteraltype;
|
||||
|
||||
@compositetype = @containertype | @structtype | @pointertype | @interfacetype | @tupletype | @signaturetype | @namedtype;
|
||||
|
||||
@containertype = @arraytype | @slicetype | @maptype | @chantype;
|
||||
|
||||
@chantype = @sendchantype | @recvchantype | @sendrcvchantype;
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
description: Add table associating methods with interfaces
|
||||
compatibility: backwards
|
||||
Reference in New Issue
Block a user