Files
carbon-lang/explorer/fuzzing/fuzzer_corpus/3f41751cfdcd69f6896ea1ffd616d2f49c7d4471
T
Richard Smith 4fa71e32f5 Add support for most kinds of declarations to be declared and used as namespace members (#2575)
Support for global variables is still missing; they're a bit more tricky because they use a pattern to introduce their name.

Prior to this change, explorer heavily relied on name comparisons to determine whether two declarations declare the same entity. Some of those instances are fixed in this PR, but more remain to be fixed, and some TODOs are added for some harder-to-fix instances.
2023-02-08 13:21:15 -08:00

1125 lines
30 KiB
Plaintext

compilation_unit {
package_statement {
package_name: "ExplorerTest"
}
is_api: true
declarations {
interface {
name {
name: "Vector"
}
members {
function {
name {
name: "Add"
}
self_pattern {
binding_pattern {
name: "self"
type {
expression_pattern {
expression {
identifier {
name: "Self"
}
}
}
}
}
}
param_pattern {
fields {
binding_pattern {
name: "b"
type {
expression_pattern {
expression {
identifier {
name: "Self"
}
}
}
}
}
}
}
return_term {
kind: Expression
type {
identifier {
name: "Self"
}
}
}
}
}
members {
function {
name {
name: "Scale"
}
self_pattern {
binding_pattern {
name: "self"
type {
expression_pattern {
expression {
identifier {
name: "Self"
}
}
}
}
}
}
param_pattern {
fields {
binding_pattern {
name: "v"
type {
expression_pattern {
expression {
int_type_literal {
}
}
}
}
}
}
}
return_term {
kind: Expression
type {
identifier {
name: "Self"
}
}
}
}
}
}
}
declarations {
class_declaration {
name {
name: "Point1"
}
members {
variable {
binding {
name: "x"
type {
expression_pattern {
expression {
int_type_literal {
}
}
}
}
}
}
}
members {
variable {
binding {
name: "y"
type {
expression_pattern {
expression {
int_type_literal {
}
}
}
}
}
}
}
members {
impl {
kind: InternalImpl
impl_type {
identifier {
name: "Point1"
}
}
interface {
identifier {
name: "Vector"
}
}
members {
function {
name {
name: "Add"
}
self_pattern {
binding_pattern {
name: "self"
type {
expression_pattern {
expression {
identifier {
name: "Point1"
}
}
}
}
}
}
param_pattern {
fields {
binding_pattern {
name: "b"
type {
expression_pattern {
expression {
identifier {
name: "Point1"
}
}
}
}
}
}
}
return_term {
kind: Expression
type {
identifier {
name: "Point1"
}
}
}
body {
statements {
return_expression_statement {
expression {
struct_literal {
fields {
name: "x"
expression {
operator {
op: Add
arguments {
simple_member_access {
field: "x"
object {
identifier {
name: "self"
}
}
}
}
arguments {
simple_member_access {
field: "x"
object {
identifier {
name: "b"
}
}
}
}
}
}
}
fields {
name: "y"
expression {
operator {
op: Add
arguments {
simple_member_access {
field: "y"
object {
identifier {
name: "self"
}
}
}
}
arguments {
simple_member_access {
field: "y"
object {
identifier {
name: "b"
}
}
}
}
}
}
}
}
}
}
}
}
}
}
members {
function {
name {
name: "Scale"
}
self_pattern {
binding_pattern {
name: "self"
type {
expression_pattern {
expression {
identifier {
name: "Point1"
}
}
}
}
}
}
param_pattern {
fields {
binding_pattern {
name: "v"
type {
expression_pattern {
expression {
int_type_literal {
}
}
}
}
}
}
}
return_term {
kind: Expression
type {
identifier {
name: "Point1"
}
}
}
body {
statements {
return_expression_statement {
expression {
struct_literal {
fields {
name: "x"
expression {
operator {
op: Mul
arguments {
simple_member_access {
field: "x"
object {
identifier {
name: "self"
}
}
}
}
arguments {
identifier {
name: "v"
}
}
}
}
}
fields {
name: "y"
expression {
operator {
op: Mul
arguments {
simple_member_access {
field: "y"
object {
identifier {
name: "self"
}
}
}
}
arguments {
identifier {
name: "v"
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
declarations {
class_declaration {
name {
name: "Point2"
}
members {
variable {
binding {
name: "x"
type {
expression_pattern {
expression {
int_type_literal {
}
}
}
}
}
}
}
members {
variable {
binding {
name: "y"
type {
expression_pattern {
expression {
int_type_literal {
}
}
}
}
}
}
}
members {
impl {
kind: InternalImpl
impl_type {
identifier {
name: "Point2"
}
}
interface {
identifier {
name: "Vector"
}
}
members {
function {
name {
name: "Add"
}
self_pattern {
binding_pattern {
name: "self"
type {
expression_pattern {
expression {
identifier {
name: "Point2"
}
}
}
}
}
}
param_pattern {
fields {
binding_pattern {
name: "b"
type {
expression_pattern {
expression {
identifier {
name: "Point2"
}
}
}
}
}
}
}
return_term {
kind: Expression
type {
identifier {
name: "Point2"
}
}
}
body {
statements {
return_expression_statement {
expression {
struct_literal {
fields {
name: "x"
expression {
operator {
op: Add
arguments {
operator {
op: Add
arguments {
simple_member_access {
field: "x"
object {
identifier {
name: "self"
}
}
}
}
arguments {
simple_member_access {
field: "x"
object {
identifier {
name: "b"
}
}
}
}
}
}
arguments {
int_literal {
value: 1
}
}
}
}
}
fields {
name: "y"
expression {
operator {
op: Add
arguments {
operator {
op: Add
arguments {
simple_member_access {
field: "y"
object {
identifier {
name: "self"
}
}
}
}
arguments {
simple_member_access {
field: "y"
object {
identifier {
name: "b"
}
}
}
}
}
}
arguments {
int_literal {
value: 1
}
}
}
}
}
}
}
}
}
}
}
}
members {
function {
name {
name: "Scale"
}
self_pattern {
binding_pattern {
name: "self"
type {
expression_pattern {
expression {
identifier {
name: "Point2"
}
}
}
}
}
}
param_pattern {
fields {
binding_pattern {
name: "v"
type {
expression_pattern {
expression {
int_type_literal {
}
}
}
}
}
}
}
return_term {
kind: Expression
type {
identifier {
name: "Point2"
}
}
}
body {
statements {
return_expression_statement {
expression {
struct_literal {
fields {
name: "x"
expression {
operator {
op: Mul
arguments {
operator {
op: Mul
arguments {
simple_member_access {
field: "x"
object {
identifier {
name: "self"
}
}
}
}
arguments {
identifier {
name: "v"
}
}
}
}
arguments {
int_literal {
value: 2
}
}
}
}
}
fields {
name: "y"
expression {
operator {
op: Mul
arguments {
operator {
op: Mul
arguments {
simple_member_access {
field: "y"
object {
identifier {
name: "self"
}
}
}
}
arguments {
identifier {
name: "v"
}
}
}
}
arguments {
int_literal {
value: 2
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
declarations {
function {
name {
name: "ScaleGeneric"
}
deduced_parameters {
name: "U"
type {
identifier {
name: "Vector"
}
}
}
param_pattern {
fields {
binding_pattern {
name: "c"
type {
expression_pattern {
expression {
identifier {
name: "U"
}
}
}
}
}
}
fields {
binding_pattern {
name: "s"
type {
expression_pattern {
expression {
int_type_literal {
}
}
}
}
}
}
}
return_term {
kind: Expression
type {
identifier {
name: "U"
}
}
}
body {
statements {
return_expression_statement {
expression {
call {
function {
simple_member_access {
field: "Scale"
object {
identifier {
name: "c"
}
}
}
}
argument {
tuple_literal {
fields {
identifier {
name: "s"
}
}
}
}
}
}
}
}
}
}
}
declarations {
function {
name {
name: "AddAndScaleGeneric"
}
deduced_parameters {
name: "T"
type {
identifier {
name: "Vector"
}
}
}
deduced_parameters {
name: "V"
type {
identifier {
name: "Vector"
}
}
}
param_pattern {
fields {
binding_pattern {
name: "a"
type {
expression_pattern {
expression {
identifier {
name: "T"
}
}
}
}
}
}
fields {
binding_pattern {
name: "b"
type {
expression_pattern {
expression {
identifier {
name: "V"
}
}
}
}
}
}
fields {
binding_pattern {
name: "s"
type {
expression_pattern {
expression {
int_type_literal {
}
}
}
}
}
}
}
return_term {
kind: Expression
type {
tuple_literal {
fields {
identifier {
name: "T"
}
}
fields {
identifier {
name: "V"
}
}
}
}
}
body {
statements {
return_expression_statement {
expression {
tuple_literal {
fields {
call {
function {
identifier {
name: "ScaleGeneric"
}
}
argument {
tuple_literal {
fields {
call {
function {
simple_member_access {
field: "Add"
object {
identifier {
name: "a"
}
}
}
}
argument {
tuple_literal {
fields {
identifier {
name: "a"
}
}
}
}
}
}
fields {
identifier {
name: "s"
}
}
}
}
}
}
fields {
call {
function {
identifier {
name: "ScaleGeneric"
}
}
argument {
tuple_literal {
fields {
call {
function {
simple_member_access {
field: "Add"
object {
identifier {
name: "b"
}
}
}
}
argument {
tuple_literal {
fields {
identifier {
name: "b"
}
}
}
}
}
}
fields {
identifier {
name: "s"
}
}
}
}
}
}
}
}
}
}
}
}
}
declarations {
function {
name {
name: "Main"
}
param_pattern {
}
return_term {
kind: Expression
type {
int_type_literal {
}
}
}
body {
statements {
variable_definition {
pattern {
binding_pattern {
name: "a"
type {
expression_pattern {
expression {
identifier {
name: "Point1"
}
}
}
}
}
}
init {
struct_literal {
fields {
name: "x"
expression {
int_literal {
value: 1
}
}
}
fields {
name: "y"
expression {
int_literal {
value: 1
}
}
}
}
}
is_returned: false
}
}
statements {
variable_definition {
pattern {
binding_pattern {
name: "b"
type {
expression_pattern {
expression {
identifier {
name: "Point2"
}
}
}
}
}
}
init {
struct_literal {
fields {
name: "x"
expression {
int_literal {
value: 2
}
}
}
fields {
name: "y"
expression {
int_literal {
value: 3
}
}
}
}
}
is_returned: false
}
}
statements {
variable_definition {
pattern {
tuple_pattern {
fields {
binding_pattern {
name: "p"
type {
expression_pattern {
expression {
identifier {
name: "Point1"
}
}
}
}
}
}
fields {
binding_pattern {
name: "q"
type {
expression_pattern {
expression {
identifier {
name: "Point2"
}
}
}
}
}
}
}
}
init {
call {
function {
identifier {
name: "AddAndScaleGeneric"
}
}
argument {
tuple_literal {
fields {
identifier {
name: "a"
}
}
fields {
identifier {
name: "b"
}
}
fields {
int_literal {
value: 5
}
}
}
}
}
}
is_returned: false
}
}
statements {
return_expression_statement {
expression {
operator {
op: Sub
arguments {
operator {
op: Sub
arguments {
simple_member_access {
field: "x"
object {
identifier {
name: "q"
}
}
}
}
arguments {
simple_member_access {
field: "x"
object {
identifier {
name: "p"
}
}
}
}
}
}
arguments {
int_literal {
value: 40
}
}
}
}
}
}
}
}
}
}