Skip to content
Snippets Groups Projects
Commit c64eed57 authored by Per Hedbor's avatar Per Hedbor
Browse files

For now: Add automatic softcast nodes for += with friends

The actual assignment was never typechecked before.
So now everything works like it used to again.
parent 0aeaca58
Branches
Tags
No related merge requests found
...@@ -1613,13 +1613,68 @@ F_LOOP(0 = +[ !depend_p($$, $$)] ...@@ -1613,13 +1613,68 @@ F_LOOP(0 = +[ !depend_p($$, $$)]
; ;
// convert all X_EQ(1,2) to $1 = $1 X $2 // convert all X_EQ(1,2) to $1 = $1 X $2
F_ADD_EQ(0,1) : { $$ = mknode( F_ASSIGN, mkopernode( "`+", $0, $1 ), $0 ); }; F_ADD_EQ(0,1) : {
F_AND_EQ(0,1) : { $$ = mknode( F_ASSIGN, mkopernode( "`&", $0, $1 ), $0 ); }; struct pike_type *type = $0->type;
F_OR_EQ(0,1) : { $$ = mknode( F_ASSIGN, mkopernode( "`|", $0, $1 ), $0 ); }; add_ref(type);
F_XOR_EQ(0,1) : { $$ = mknode( F_ASSIGN, mkopernode( "`^", $0, $1 ), $0 ); }; $$ = mknode( F_ASSIGN, mksoftcastnode(type,mkopernode( "`+", $0, $1 )), $0 );
F_LSH_EQ(0,1) : { $$ = mknode( F_ASSIGN, mkopernode( "`<<", $0, $1 ), $0 ); }; };
F_RSH_EQ(0,1) : { $$ = mknode( F_ASSIGN, mkopernode( "`>>", $0, $1 ), $0 ); };
F_SUB_EQ(0,1) : { $$ = mknode( F_ASSIGN, mkopernode( "`-", $0, $1 ), $0 ); }; F_SUB_EQ(0,1) : {
F_MULT_EQ(0,1): { $$ = mknode( F_ASSIGN, mkopernode( "`*", $0, $1 ), $0 ); }; struct pike_type *type = $0->type;
F_MOD_EQ(0,1) : { $$ = mknode( F_ASSIGN, mkopernode( "`%", $0, $1 ), $0 ); }; add_ref(type);
F_DIV_EQ(0,1) : { $$ = mknode( F_ASSIGN, mkopernode( "`/", $0, $1 ), $0 ); }; $$ = mknode( F_ASSIGN, mksoftcastnode(type,mkopernode( "`-", $0, $1 )), $0 );
};
F_AND_EQ(0,1) : {
struct pike_type *type = $0->type;
add_ref(type);
$$ = mknode( F_ASSIGN, mksoftcastnode(type,mkopernode( "`&", $0, $1 )), $0 );
};
F_OR_EQ(0,1) : {
struct pike_type *type = $0->type;
add_ref(type);
$$ = mknode( F_ASSIGN, mksoftcastnode(type,mkopernode( "`|", $0, $1 )), $0 );
};
F_XOR_EQ(0,1) :
{
struct pike_type *type = $0->type;
add_ref(type);
$$ = mknode( F_ASSIGN, mksoftcastnode(type,mkopernode( "`^", $0, $1 )), $0 );
};
F_LSH_EQ(0,1) :
{
struct pike_type *type = $0->type;
add_ref(type);
$$ = mknode( F_ASSIGN, mksoftcastnode(type,mkopernode( "`<<", $0, $1)), $0 );
};
F_RSH_EQ(0,1) :
{
struct pike_type *type = $0->type;
add_ref(type);
$$ = mknode( F_ASSIGN, mksoftcastnode(type,mkopernode( "`>>", $0, $1)), $0 );
};
F_MULT_EQ(0,1):
{
struct pike_type *type = $0->type;
add_ref(type);
$$ = mknode( F_ASSIGN, mksoftcastnode(type,mkopernode( "`*", $0, $1 )), $0 );
};
F_MOD_EQ(0,1) :
{
struct pike_type *type = $0->type;
add_ref(type);
$$ = mknode( F_ASSIGN, mksoftcastnode(type,mkopernode( "`%", $0, $1 )), $0 );
};
F_DIV_EQ(0,1) :
{
struct pike_type *type = $0->type;
add_ref(type);
$$ = mknode( F_ASSIGN, mksoftcastnode(type,mkopernode( "`/", $0, $1 )), $0 );
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment