Remove : from vars in exec semantics (#504)

Going through tests, funptr1.6c is the main spot I see a real change, I added parens to get around an issue parsing fnty.

Co-authored-by: Geoff Romer <gromer@google.com>
This commit is contained in:
Jon Meow
2021-05-06 14:21:31 -07:00
committed by GitHub
co-authored by Geoff Romer
parent 56b47bcfa9
commit 05663633d3
61 changed files with 145 additions and 137 deletions
+38 -30
View File
@@ -104,6 +104,7 @@ void yy::parser::error(
%type <const Carbon::Expression*> return_type
%type <const Carbon::Expression*> paren_expression
%type <const Carbon::Expression*> tuple
%type <const Carbon::Expression*> var_compatible_expression
%type <Carbon::Member*> variable_declaration
%type <Carbon::Member*> member
%type <std::list<Carbon::Member*>*> member_list
@@ -164,7 +165,7 @@ void yy::parser::error(
;
%precedence "{" "}"
%precedence ":" "," DBLARROW
%precedence "," DBLARROW
%left OR AND
%nonassoc EQUAL_EQUAL
%left "+" "-"
@@ -183,31 +184,10 @@ pattern:
{ $$ = $1; }
;
expression:
identifier
{ $$ = Carbon::Expression::MakeVar(yylineno, $1); }
| expression designator
{ $$ = Carbon::Expression::MakeGetField(yylineno, $1, $2); }
| expression "[" expression "]"
{ $$ = Carbon::Expression::MakeIndex(yylineno, $1, $3); }
| expression ":" identifier
{ $$ = Carbon::Expression::MakeVarPat(yylineno, $3, $1); }
| integer_literal
{ $$ = Carbon::Expression::MakeInt(yylineno, $1); }
| TRUE
{ $$ = Carbon::Expression::MakeBool(yylineno, true); }
| FALSE
{ $$ = Carbon::Expression::MakeBool(yylineno, false); }
| INT
{ $$ = Carbon::Expression::MakeIntType(yylineno); }
| BOOL
{ $$ = Carbon::Expression::MakeBoolType(yylineno); }
| TYPE
{ $$ = Carbon::Expression::MakeTypeType(yylineno); }
| AUTO
{ $$ = Carbon::Expression::MakeAutoType(yylineno); }
| CONTINUATION_TYPE
{ $$ = Carbon::Expression::MakeContinuationType(yylineno); }
| paren_expression { $$ = $1; }
var_compatible_expression
{ $$ = $1; }
| var_compatible_expression identifier
{ $$ = Carbon::Expression::MakeVarPat(yylineno, $2, $1); }
| expression EQUAL_EQUAL expression
{ $$ = Carbon::Expression::MakeBinOp(yylineno, Carbon::Operator::Eq, $1, $3); }
| expression "+" expression
@@ -222,11 +202,39 @@ expression:
{ $$ = Carbon::Expression::MakeUnOp(yylineno, Carbon::Operator::Not, $2); }
| "-" expression %prec UNARY_MINUS
{ $$ = Carbon::Expression::MakeUnOp(yylineno, Carbon::Operator::Neg, $2); }
| expression tuple
{ $$ = Carbon::Expression::MakeCall(yylineno, $1, $2); }
| FNTY tuple return_type
{ $$ = Carbon::Expression::MakeFunType(yylineno, $2, $3); }
;
// This is the subset of `expression` which can act as the type part of a
// variable declaration without creating ambiguity.
var_compatible_expression:
paren_expression
{ $$ = $1; }
| identifier
{ $$ = Carbon::Expression::MakeVar(yylineno, $1); }
| TRUE
{ $$ = Carbon::Expression::MakeBool(yylineno, true); }
| FALSE
{ $$ = Carbon::Expression::MakeBool(yylineno, false); }
| INT
{ $$ = Carbon::Expression::MakeIntType(yylineno); }
| BOOL
{ $$ = Carbon::Expression::MakeBoolType(yylineno); }
| TYPE
{ $$ = Carbon::Expression::MakeTypeType(yylineno); }
| AUTO
{ $$ = Carbon::Expression::MakeAutoType(yylineno); }
| CONTINUATION_TYPE
{ $$ = Carbon::Expression::MakeContinuationType(yylineno); }
| integer_literal
{ $$ = Carbon::Expression::MakeInt(yylineno, $1); }
| expression designator
{ $$ = Carbon::Expression::MakeGetField(yylineno, $1, $2); }
| expression "[" expression "]"
{ $$ = Carbon::Expression::MakeIndex(yylineno, $1, $3); }
| expression tuple
{ $$ = Carbon::Expression::MakeCall(yylineno, $1, $2); }
;
designator: "." identifier { $$ = $2; }
;
paren_expression: "(" paren_contents ")"
@@ -340,8 +348,8 @@ function_declaration:
FN identifier tuple return_type ";"
{ $$ = MakeFunDef(yylineno, $2, $4, $3, 0); }
;
variable_declaration: expression ":" identifier
{ $$ = MakeField(yylineno, $3, $1); }
variable_declaration: var_compatible_expression identifier
{ $$ = MakeField(yylineno, $2, $1); }
;
member: VAR variable_declaration ";"
{ $$ = $2; }