Changeset 46da46b for src/Parser


Ignore:
Timestamp:
May 2, 2023, 3:44:31 AM (17 months ago)
Author:
Fangren Yu <f37yu@…>
Branches:
ast-experimental, master
Children:
0c840fc
Parents:
1ab773e0
Message:

current progress

Location:
src/Parser
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/ExpressionNode.cc

    r1ab773e0 r46da46b  
    544544}; // OperName
    545545
    546 Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node ) {
     546Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node, CastExpr::CastKind kind ) {
    547547        Type * targetType = maybeMoveBuildType( decl_node );
    548548        if ( dynamic_cast< VoidType * >( targetType ) ) {
    549549                delete targetType;
    550                 return new CastExpr( maybeMoveBuild< Expression >(expr_node), false );
     550                return new CastExpr( maybeMoveBuild< Expression >(expr_node), false, kind );
    551551        } else {
    552                 return new CastExpr( maybeMoveBuild< Expression >(expr_node), targetType, false );
     552                return new CastExpr( maybeMoveBuild< Expression >(expr_node), targetType, false, kind );
    553553        } // if
    554554} // build_cast
  • src/Parser/ParseNode.h

    r1ab773e0 r46da46b  
    189189DimensionExpr * build_dimensionref( const std::string * name );
    190190
    191 Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node );
     191Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node, CastExpr::CastKind kind = CastExpr::Default );
    192192Expression * build_keyword_cast( AggregateDecl::Aggregate target, ExpressionNode * expr_node );
    193193Expression * build_virtual_cast( DeclarationNode * decl_node, ExpressionNode * expr_node );
  • src/Parser/parser.yy

    r1ab773e0 r46da46b  
    905905                { $$ = new ExpressionNode( new VirtualCastExpr( maybeMoveBuild<Expression>( $5 ), maybeMoveBuildType( $3 ) ) ); }
    906906        | '(' RETURN type_no_function ')' cast_expression       // CFA
    907                 { SemanticError( yylloc, "Return cast is currently unimplemented." ); $$ = nullptr; }
     907                { $$ = new ExpressionNode( build_cast( $3, $5, CastExpr::Return ) ); }
    908908        | '(' COERCE type_no_function ')' cast_expression       // CFA
    909909                { SemanticError( yylloc, "Coerce cast is currently unimplemented." ); $$ = nullptr; }
Note: See TracChangeset for help on using the changeset viewer.