Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdde845e

Browse files
committed
Rust: Refactor type inference to use newTypeItem class
1 parent27874ca commitdde845e

File tree

5 files changed

+88
-149
lines changed

5 files changed

+88
-149
lines changed

‎rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ class StreamCipherInit extends Cryptography::CryptographicOperation::Range {
3030
// extract the algorithm name from the type of `ce` or its receiver.
3131
exists(Typet,TypePathtp|
3232
t=inferType([call,call.(MethodCall).getReceiver()],tp)and
33-
rawAlgorithmName=t.(StructType).getStruct().(Addressable).getCanonicalPath().splitAt("::")
33+
rawAlgorithmName=
34+
t.(StructType).getTypeItem().(Addressable).getCanonicalPath().splitAt("::")
3435
)and
3536
algorithmName=simplifyAlgorithmName(rawAlgorithmName)and
3637
// only match a known cryptographic algorithm

‎rust/ql/lib/codeql/rust/internal/Type.qll‎

Lines changed: 35 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,8 @@ private predicate dynTraitTypeParameter(Trait trait, AstNode n) {
3232

3333
cached
3434
newtypeTType=
35-
TStruct(Structs){ Stages::TypeInferenceStage::ref()}or
36-
TEnum(Enume)or
35+
TDataType(TypeItemti){ Stages::TypeInferenceStage::ref()}or
3736
TTrait(Traitt)or
38-
TUnion(Unionu)or
3937
TImplTraitType(ImplTraitTypeReprimpl)or
4038
TDynTraitType(Traitt){t=any(DynTraitTypeReprdt).getTrait()}or
4139
TNeverType()or
@@ -92,7 +90,7 @@ abstract class Type extends TType {
9290
classTupleTypeextendsStructType{
9391
privateintarity;
9492

95-
TupleType(){arity=this.getStruct().(Builtins::TupleType).getArity()}
93+
TupleType(){arity=this.getTypeItem().(Builtins::TupleType).getArity()}
9694

9795
/** Gets the arity of this tuple type. */
9896
intgetArity(){result=arity}
@@ -112,48 +110,49 @@ class UnitType extends TupleType {
112110
overridestringtoString(){result="()"}
113111
}
114112

115-
/** A struct type. */
116-
classStructTypeextendsType,TStruct{
117-
privateStructstruct;
113+
classDataTypeextendsType,TDataType{
114+
privateTypeItemtypeItem;
118115

119-
StructType(){this=TStruct(struct)}
116+
DataType(){this=TDataType(typeItem)}
120117

121-
/** Gets thestructthat thisstruct type represents. */
122-
StructgetStruct(){result=struct}
118+
/** Gets thetype itemthat thisdata type represents. */
119+
TypeItemgetTypeItem(){result=typeItem}
123120

124121
overrideTypeParametergetPositionalTypeParameter(inti){
125-
result=TTypeParamTypeParameter(struct.getGenericParamList().getTypeParam(i))
122+
result=TTypeParamTypeParameter(typeItem.getGenericParamList().getTypeParam(i))
126123
}
127124

128125
overrideTypeMentiongetTypeParameterDefault(inti){
129-
result=struct.getGenericParamList().getTypeParam(i).getDefaultType()
126+
result=typeItem.getGenericParamList().getTypeParam(i).getDefaultType()
130127
}
131128

132-
overridestringtoString(){result=struct.getName().getText()}
129+
overridestringtoString(){result=typeItem.getName().getText()}
133130

134-
overrideLocationgetLocation(){result=struct.getLocation()}
131+
overrideLocationgetLocation(){result=typeItem.getLocation()}
135132
}
136133

137-
/** An enum type. */
138-
classEnumTypeextendsType,TEnum{
139-
privateEnumenum;
140-
141-
EnumType(){this=TEnum(enum)}
134+
/** A struct type. */
135+
classStructTypeextendsDataType{
136+
StructType(){super.getTypeItem()instanceofStruct}
142137

143-
/** Gets the enum that this enum type represents. */
144-
EnumgetEnum(){result=enum}
138+
/** Gets the struct that this struct type represents. */
139+
overrideStructgetTypeItem(){result=super.getTypeItem()}
140+
}
145141

146-
overrideTypeParametergetPositionalTypeParameter(inti){
147-
result=TTypeParamTypeParameter(enum.getGenericParamList().getTypeParam(i))
148-
}
142+
/** An enum type. */
143+
classEnumTypeextendsDataType{
144+
EnumType(){super.getTypeItem()instanceofEnum}
149145

150-
overrideTypeMentiongetTypeParameterDefault(inti){
151-
result=enum.getGenericParamList().getTypeParam(i).getDefaultType()
152-
}
146+
/** Gets the enum that this enum type represents. */
147+
overrideEnumgetTypeItem(){result=super.getTypeItem()}
148+
}
153149

154-
overridestringtoString(){result=enum.getName().getText()}
150+
/** A union type. */
151+
classUnionTypeextendsDataType{
152+
UnionType(){super.getTypeItem()instanceofUnion}
155153

156-
overrideLocationgetLocation(){result=enum.getLocation()}
154+
/** Gets the union that this union type represents. */
155+
overrideUniongetTypeItem(){result=super.getTypeItem()}
157156
}
158157

159158
/** A trait type. */
@@ -186,35 +185,13 @@ class TraitType extends Type, TTrait {
186185
overrideLocationgetLocation(){result=trait.getLocation()}
187186
}
188187

189-
/** A union type. */
190-
classUnionTypeextendsType,TUnion{
191-
privateUnionunion;
192-
193-
UnionType(){this=TUnion(union)}
194-
195-
/** Gets the union that this union type represents. */
196-
UniongetUnion(){result=union}
197-
198-
overrideTypeParametergetPositionalTypeParameter(inti){
199-
result=TTypeParamTypeParameter(union.getGenericParamList().getTypeParam(i))
200-
}
201-
202-
overrideTypeMentiongetTypeParameterDefault(inti){
203-
result=union.getGenericParamList().getTypeParam(i).getDefaultType()
204-
}
205-
206-
overridestringtoString(){result=union.getName().getText()}
207-
208-
overrideLocationgetLocation(){result=union.getLocation()}
209-
}
210-
211188
/**
212189
* An array type.
213190
*
214191
* Array types like `[i64; 5]` are modeled as normal generic types.
215192
*/
216193
classArrayTypeextendsStructType{
217-
ArrayType(){this.getStruct()instanceof Builtins::ArrayType}
194+
ArrayType(){this.getTypeItem()instanceof Builtins::ArrayType}
218195

219196
overridestringtoString(){result="[;]"}
220197
}
@@ -227,13 +204,13 @@ TypeParamTypeParameter getArrayTypeParameter() {
227204
abstractclassRefTypeextendsStructType{}
228205

229206
classRefMutTypeextendsRefType{
230-
RefMutType(){this.getStruct()instanceof Builtins::RefMutType}
207+
RefMutType(){this.getTypeItem()instanceof Builtins::RefMutType}
231208

232209
overridestringtoString(){result="&mut"}
233210
}
234211

235212
classRefSharedTypeextendsRefType{
236-
RefSharedType(){this.getStruct()instanceof Builtins::RefSharedType}
213+
RefSharedType(){this.getTypeItem()instanceof Builtins::RefSharedType}
237214

238215
overridestringtoString(){result="&"}
239216
}
@@ -330,7 +307,7 @@ class ImplTraitReturnType extends ImplTraitType {
330307
* with a single type argument.
331308
*/
332309
classSliceTypeextendsStructType{
333-
SliceType(){this.getStruct()instanceof Builtins::SliceType}
310+
SliceType(){this.getTypeItem()instanceof Builtins::SliceType}
334311

335312
overridestringtoString(){result="[]"}
336313
}
@@ -356,13 +333,13 @@ TypeParamTypeParameter getPtrTypeParameter() {
356333
}
357334

358335
classPtrMutTypeextendsPtrType{
359-
PtrMutType(){this.getStruct()instanceof Builtins::PtrMutType}
336+
PtrMutType(){this.getTypeItem()instanceof Builtins::PtrMutType}
360337

361338
overridestringtoString(){result="*mut"}
362339
}
363340

364341
classPtrConstTypeextendsPtrType{
365-
PtrConstType(){this.getStruct()instanceof Builtins::PtrConstType}
342+
PtrConstType(){this.getTypeItem()instanceof Builtins::PtrConstType}
366343

367344
overridestringtoString(){result="*const"}
368345
}
@@ -624,7 +601,7 @@ pragma[nomagic]
624601
predicatevalidSelfType(Typet){
625602
tinstanceofRefType
626603
or
627-
exists(Structs|t=TStruct(s)|
604+
exists(Structs|t=TDataType(s)|
628605
sinstanceofBoxStructor
629606
sinstanceofRcStructor
630607
sinstanceofArcStructor

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp