github / github/codeql

[question?] counterintuitive class method behaviour

Abierto
#21,670 9 comentarios 0 reacciones 0 asignados Ver en GitHub
question
Lenguaje dominante
CodeQL
Estrellas
10.1k
Forks
2.1k
Merge medio
2 d 15 h
PR fusionados (30 d)
141

Descripción

When I write a query like this:
```codeql
class Meow extends Struct {
Field f;
Meow() {
f.getDeclaringType() = this
}
Field getField() { result = f }
}

from Meow m
select m, m.getField(), m.getField()
```
My mental model of this is: "`Meow` is essentially a (struct, struct's field) tuple. `from Meow m` will select all of those tuples. For each of those , `select m, m.getField(), m.getField()` will print their contents."

But that is actually not what happens, because you get results like this:
```
| m | col1 | col2 |
+-----------------------------------+-----------------------------------------------------+-----------------------------------------------------+
// [snip]
| port_io_ops | f_inb | f_outb |
// [snip]
```
Which means that the first `m.getField()` and the second `m.getField()` are operating on different `Meow` objects.

I've been debugging a bug in my query for hours now only to realize that this is what happens. Is this really intended? I read through a non-trivial amount of documentation and did not realize this, I feel like my whole mental model of how codeql works is shattering :S

(If it is really intended, could the documentation be updated to point this out more clearly?)

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Start with the CodeQL query and output shown in the issue, then read the documentation covering class methods and predicate evaluation. Confirm the intended behavior and identify the relevant documentation section; done means the behavior is explained clearly enough to address the reported mental-model gap.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Área
documentation
Tipo de issue
Documentación
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
38/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.