mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 19:40:10 +01:00
462 lines
10 KiB
Protocol Buffer
462 lines
10 KiB
Protocol Buffer
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
// Exceptions. See /LICENSE for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
syntax = "proto2";
|
|
|
|
package Carbon.Fuzzing;
|
|
|
|
message LibraryName {
|
|
optional string package_name = 1;
|
|
optional string path = 2;
|
|
}
|
|
|
|
// Expressions.
|
|
|
|
message CallExpression {
|
|
optional Expression function = 1;
|
|
optional Expression argument = 2;
|
|
}
|
|
|
|
message FunctionTypeLiteral {
|
|
optional TupleLiteralExpression parameter = 3;
|
|
optional Expression return_type = 2;
|
|
}
|
|
|
|
message SimpleMemberAccessExpression {
|
|
optional string field = 1;
|
|
optional Expression object = 2;
|
|
}
|
|
|
|
message CompoundMemberAccessExpression {
|
|
optional Expression object = 1;
|
|
optional Expression path = 2;
|
|
}
|
|
|
|
message IndexExpression {
|
|
optional Expression object = 1;
|
|
optional Expression offset = 2;
|
|
}
|
|
|
|
message OperatorExpression {
|
|
enum Operator {
|
|
UnknownOperator = 0;
|
|
Add = 1;
|
|
AddressOf = 2;
|
|
And = 3;
|
|
Deref = 4;
|
|
Eq = 5;
|
|
Mul = 6;
|
|
Neg = 7;
|
|
Not = 8;
|
|
Or = 9;
|
|
Sub = 10;
|
|
Ptr = 11;
|
|
BitwiseAnd = 12;
|
|
As = 13;
|
|
Mod = 14;
|
|
Complement = 15;
|
|
BitwiseOr = 16;
|
|
BitwiseXor = 17;
|
|
BitShiftLeft = 18;
|
|
BitShiftRight = 19;
|
|
Less = 20;
|
|
LessEq = 21;
|
|
Greater = 22;
|
|
GreaterEq = 23;
|
|
NotEq = 24;
|
|
Div = 25;
|
|
}
|
|
optional Operator op = 1;
|
|
repeated Expression arguments = 2;
|
|
}
|
|
|
|
message TupleLiteralExpression {
|
|
repeated Expression fields = 1;
|
|
}
|
|
|
|
message FieldInitializer {
|
|
optional string name = 1;
|
|
optional Expression expression = 2;
|
|
}
|
|
|
|
message StructLiteralExpression {
|
|
repeated FieldInitializer fields = 1;
|
|
}
|
|
|
|
message StructTypeLiteralExpression {
|
|
repeated FieldInitializer fields = 1;
|
|
}
|
|
|
|
message IdentifierExpression {
|
|
optional string name = 1;
|
|
}
|
|
|
|
message DesignatorExpression {
|
|
optional string name = 1;
|
|
}
|
|
|
|
message IfExpression {
|
|
optional Expression condition = 1;
|
|
optional Expression then_expression = 2;
|
|
optional Expression else_expression = 3;
|
|
}
|
|
|
|
message BoolTypeLiteral {}
|
|
|
|
message BoolLiteral {
|
|
optional bool value = 1;
|
|
}
|
|
|
|
message IntTypeLiteral {}
|
|
message ContinuationTypeLiteral {}
|
|
|
|
message IntLiteral {
|
|
optional int64 value = 1;
|
|
}
|
|
|
|
message StringLiteral {
|
|
optional string value = 1;
|
|
}
|
|
|
|
message StringTypeLiteral {}
|
|
message TypeTypeLiteral {}
|
|
|
|
message UnimplementedExpression {}
|
|
|
|
message ArrayTypeLiteral {
|
|
optional Expression element_type = 1;
|
|
optional Expression size = 2;
|
|
}
|
|
|
|
message IsWhereClause {
|
|
optional Expression type = 1;
|
|
optional Expression constraint = 2;
|
|
}
|
|
|
|
message EqualsWhereClause {
|
|
optional Expression lhs = 1;
|
|
optional Expression rhs = 2;
|
|
}
|
|
|
|
message RewriteWhereClause {
|
|
optional string member_name = 1;
|
|
optional Expression replacement = 2;
|
|
}
|
|
|
|
message WhereClause {
|
|
oneof kind {
|
|
IsWhereClause is = 1;
|
|
EqualsWhereClause equals = 2;
|
|
RewriteWhereClause rewrite = 3;
|
|
}
|
|
}
|
|
|
|
message WhereExpression {
|
|
optional Expression base = 1;
|
|
repeated WhereClause clauses = 2;
|
|
}
|
|
|
|
message Expression {
|
|
oneof kind {
|
|
CallExpression call = 1;
|
|
FunctionTypeLiteral function_type = 2;
|
|
SimpleMemberAccessExpression simple_member_access = 3;
|
|
IndexExpression index = 4;
|
|
OperatorExpression operator = 5;
|
|
TupleLiteralExpression tuple_literal = 6;
|
|
StructLiteralExpression struct_literal = 7;
|
|
StructTypeLiteralExpression struct_type_literal = 8;
|
|
IdentifierExpression identifier = 9;
|
|
IfExpression if_expression = 11;
|
|
BoolTypeLiteral bool_type_literal = 12;
|
|
BoolLiteral bool_literal = 13;
|
|
IntTypeLiteral int_type_literal = 14;
|
|
ContinuationTypeLiteral continuation_type_literal = 15;
|
|
IntLiteral int_literal = 16;
|
|
StringLiteral string_literal = 17;
|
|
StringTypeLiteral string_type_literal = 18;
|
|
TypeTypeLiteral type_type_literal = 19;
|
|
UnimplementedExpression unimplemented_expression = 20;
|
|
ArrayTypeLiteral array_type_literal = 21;
|
|
CompoundMemberAccessExpression compound_member_access = 22;
|
|
WhereExpression where = 23;
|
|
DesignatorExpression designator = 24;
|
|
}
|
|
}
|
|
|
|
// Patterns.
|
|
|
|
message BindingPattern {
|
|
optional string name = 1;
|
|
optional Pattern type = 2;
|
|
}
|
|
|
|
message GenericBinding {
|
|
optional string name = 1;
|
|
optional Expression type = 2;
|
|
}
|
|
|
|
message TuplePattern {
|
|
repeated Pattern fields = 1;
|
|
}
|
|
|
|
message AlternativePattern {
|
|
optional Expression choice_type = 1;
|
|
optional string alternative_name = 2;
|
|
optional TuplePattern arguments = 3;
|
|
}
|
|
|
|
message ExpressionPattern {
|
|
optional Expression expression = 1;
|
|
}
|
|
|
|
message AutoPattern {}
|
|
|
|
message VarPattern {
|
|
optional Pattern pattern = 1;
|
|
}
|
|
|
|
message AddrPattern {
|
|
optional BindingPattern binding_pattern = 1;
|
|
}
|
|
|
|
message Pattern {
|
|
oneof kind {
|
|
BindingPattern binding_pattern = 1;
|
|
TuplePattern tuple_pattern = 2;
|
|
AlternativePattern alternative_pattern = 3;
|
|
ExpressionPattern expression_pattern = 4;
|
|
AutoPattern auto_pattern = 5;
|
|
VarPattern var_pattern = 6;
|
|
GenericBinding generic_binding = 7;
|
|
AddrPattern addr_pattern = 8;
|
|
}
|
|
}
|
|
|
|
// Statements.
|
|
|
|
message ExpressionStatement {
|
|
optional Expression expression = 1;
|
|
}
|
|
|
|
message AssignStatement {
|
|
optional Expression lhs = 1;
|
|
optional Expression rhs = 2;
|
|
}
|
|
|
|
message VariableDefinitionStatement {
|
|
optional Pattern pattern = 1;
|
|
optional Expression init = 2;
|
|
optional bool is_returned = 3;
|
|
}
|
|
|
|
message IfStatement {
|
|
optional Expression condition = 1;
|
|
optional BlockStatement then_block = 2;
|
|
optional BlockStatement else_block = 3;
|
|
}
|
|
|
|
message ReturnVarStatement {}
|
|
|
|
message ReturnExpressionStatement {
|
|
optional Expression expression = 1; // Can be omitted.
|
|
optional bool is_omitted_expression = 2;
|
|
}
|
|
|
|
message BlockStatement {
|
|
repeated Statement statements = 1;
|
|
}
|
|
|
|
message WhileStatement {
|
|
optional Expression condition = 1;
|
|
optional BlockStatement body = 2;
|
|
}
|
|
|
|
message ForStatement {
|
|
optional BindingPattern var_decl = 1;
|
|
optional Expression target = 2;
|
|
optional BlockStatement body = 3;
|
|
}
|
|
|
|
message MatchClause {
|
|
optional Pattern pattern = 1;
|
|
optional Statement statement = 2;
|
|
optional bool is_default = 3;
|
|
}
|
|
|
|
message MatchStatement {
|
|
optional Expression expression = 1;
|
|
repeated MatchClause clauses = 2;
|
|
}
|
|
|
|
message ContinuationStatement {
|
|
optional string name = 1;
|
|
optional BlockStatement body = 2;
|
|
}
|
|
|
|
message RunStatement {
|
|
optional Expression argument = 1;
|
|
}
|
|
|
|
message AwaitStatement {}
|
|
|
|
message BreakStatement {}
|
|
message ContinueStatement {}
|
|
|
|
message Statement {
|
|
oneof kind {
|
|
ExpressionStatement expression_statement = 1;
|
|
AssignStatement assign = 2;
|
|
VariableDefinitionStatement variable_definition = 3;
|
|
IfStatement if_statement = 4;
|
|
ReturnVarStatement return_var_statement = 5;
|
|
ReturnExpressionStatement return_expression_statement = 6;
|
|
BlockStatement block = 7;
|
|
WhileStatement while_statement = 8;
|
|
MatchStatement match = 9;
|
|
ContinuationStatement continuation = 10;
|
|
RunStatement run = 11;
|
|
AwaitStatement await_statement = 12;
|
|
BreakStatement break_statement = 13;
|
|
ContinueStatement continue_statement = 14;
|
|
ForStatement for_statement = 15;
|
|
}
|
|
}
|
|
|
|
// Declarations.
|
|
|
|
message ReturnTerm {
|
|
enum ReturnKind {
|
|
UnknownReturnKind = 0;
|
|
Omitted = 1;
|
|
Auto = 2;
|
|
Expression = 3;
|
|
}
|
|
optional ReturnKind kind = 1;
|
|
optional Expression type = 2;
|
|
}
|
|
|
|
message FunctionDeclaration {
|
|
optional string name = 1;
|
|
repeated GenericBinding deduced_parameters = 2;
|
|
optional Pattern self_pattern = 3;
|
|
optional TuplePattern param_pattern = 4;
|
|
optional ReturnTerm return_term = 5;
|
|
optional BlockStatement body = 6;
|
|
}
|
|
|
|
message DestructorDeclaration {
|
|
optional Pattern self_pattern = 1;
|
|
optional BlockStatement body = 2;
|
|
}
|
|
|
|
message ClassDeclaration {
|
|
optional string name = 1;
|
|
repeated Declaration members = 2;
|
|
optional TuplePattern type_params = 3;
|
|
}
|
|
|
|
message AlternativeSignature {
|
|
optional string name = 1;
|
|
optional TupleLiteralExpression signature = 3;
|
|
}
|
|
|
|
message ChoiceDeclaration {
|
|
optional string name = 1;
|
|
repeated AlternativeSignature alternatives = 2;
|
|
}
|
|
|
|
message VariableDeclaration {
|
|
optional BindingPattern binding = 1;
|
|
optional Expression initializer = 2;
|
|
}
|
|
|
|
message LetDeclaration {
|
|
optional Pattern pattern = 1;
|
|
// TODO: Add `optional Expression initializer = 2;` once explorer supports
|
|
// `let` declarations in general.
|
|
}
|
|
|
|
message InterfaceExtendsDeclaration {
|
|
optional Expression base = 1;
|
|
}
|
|
|
|
message InterfaceImplDeclaration {
|
|
optional Expression impl_type = 1;
|
|
optional Expression constraint = 2;
|
|
}
|
|
|
|
message InterfaceDeclaration {
|
|
optional string name = 1;
|
|
repeated Declaration members = 2;
|
|
}
|
|
|
|
message ConstraintDeclaration {
|
|
optional string name = 1;
|
|
repeated Declaration members = 2;
|
|
}
|
|
|
|
message ImplDeclaration {
|
|
enum ImplKind {
|
|
UnknownImplKind = 0;
|
|
InternalImpl = 1;
|
|
ExternalImpl = 2;
|
|
}
|
|
|
|
optional ImplKind kind = 1;
|
|
optional Expression impl_type = 2;
|
|
optional Expression interface = 3;
|
|
repeated Declaration members = 4;
|
|
}
|
|
|
|
message AliasDeclaration {
|
|
optional string name = 1;
|
|
optional Expression target = 2;
|
|
}
|
|
|
|
// EXPERIMENTAL MIXIN FEATURE
|
|
message MixinDeclaration {
|
|
optional string name = 1;
|
|
repeated Declaration members = 2;
|
|
// Type params not implemented yet
|
|
// optional TuplePattern params = 3;
|
|
optional GenericBinding self = 4;
|
|
}
|
|
|
|
// EXPERIMENTAL MIXIN FEATURE
|
|
message MixDeclaration {
|
|
optional Expression mixin = 1;
|
|
}
|
|
|
|
message Declaration {
|
|
oneof kind {
|
|
FunctionDeclaration function = 1;
|
|
ClassDeclaration class_declaration = 2;
|
|
ChoiceDeclaration choice = 3;
|
|
VariableDeclaration variable = 4;
|
|
InterfaceDeclaration interface = 5;
|
|
ImplDeclaration impl = 6;
|
|
AliasDeclaration alias = 7;
|
|
LetDeclaration let = 8;
|
|
MixinDeclaration mixin = 9;
|
|
MixDeclaration mix = 10;
|
|
DestructorDeclaration destructor = 11;
|
|
InterfaceExtendsDeclaration interface_extends = 12;
|
|
InterfaceImplDeclaration interface_impl = 13;
|
|
ConstraintDeclaration constraint = 14;
|
|
}
|
|
}
|
|
|
|
message CompilationUnit {
|
|
optional LibraryName package_statement = 1;
|
|
optional bool is_api = 2;
|
|
repeated Declaration declarations = 3;
|
|
// TODO: Add support for imports if they are useful in fuzzing.
|
|
}
|
|
|
|
// Top-level fuzzer input.
|
|
message Carbon {
|
|
optional CompilationUnit compilation_unit = 1;
|
|
}
|