@@ -1011,122 +1011,54 @@ impl Insn {
10111011 InsnPrinter { inner : self . clone ( ) , ptr_map, iseq }
10121012 }
10131013
1014- // Unused variables should NOT be allowed. We temporarily allow this to create the skeleton
1015- // structure for an effects system. Changes that specify refined effects should remove this
1016- // unused variables attribute.
1017- #[ allow( unused_variables) ]
10181014 fn get_effects ( & self ) -> Effect {
10191015 assert ! ( self . has_output( ) ) ;
10201016 match & self {
1021- Insn :: Param => unimplemented ! ( "params should not be present in block.insns" ) ,
1022- Insn :: SetGlobal { .. } | Insn :: Jump ( _) | Insn :: EntryPoint { .. }
1023- | Insn :: IfTrue { .. } | Insn :: IfFalse { .. } | Insn :: Return { .. } | Insn :: Throw { .. }
1024- | Insn :: PatchPoint { .. } | Insn :: SetIvar { .. } | Insn :: SetClassVar { .. } | Insn :: ArrayExtend { .. }
1025- | Insn :: ArrayPush { .. } | Insn :: SideExit { .. } | Insn :: SetLocal { .. } | Insn :: IncrCounter ( _)
1026- | Insn :: CheckInterrupts { .. } | Insn :: GuardBlockParamProxy { .. } | Insn :: IncrCounterPtr { .. }
1027- | Insn :: StoreField { .. } | Insn :: WriteBarrier { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1028- Insn :: Const { val : Const :: Value ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1029- Insn :: Const { val : Const :: CBool ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1030- Insn :: Const { val : Const :: CInt8 ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1031- Insn :: Const { val : Const :: CInt16 ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1032- Insn :: Const { val : Const :: CInt32 ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1033- Insn :: Const { val : Const :: CInt64 ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1034- Insn :: Const { val : Const :: CUInt8 ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1035- Insn :: Const { val : Const :: CUInt16 ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1036- Insn :: Const { val : Const :: CUInt32 ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1037- Insn :: Const { val : Const :: CUInt64 ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1038- Insn :: Const { val : Const :: CPtr ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1039- Insn :: Const { val : Const :: CDouble ( val) } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1040- Insn :: Test { val } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1041- Insn :: IsNil { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1042- Insn :: IsMethodCfunc { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1043- Insn :: IsBitEqual { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1044- Insn :: IsBitNotEqual { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1045- Insn :: BoxBool { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1046- Insn :: BoxFixnum { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1047- Insn :: UnboxFixnum { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1048- Insn :: StringCopy { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1049- Insn :: StringIntern { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1050- Insn :: StringConcat { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1051- Insn :: StringGetbyte { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1052- Insn :: StringSetbyteFixnum { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1053- Insn :: StringAppend { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1054- Insn :: StringAppendCodepoint { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1055- Insn :: ToRegexp { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1056- Insn :: NewArray { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1057- Insn :: ArrayDup { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1058- Insn :: ArrayArefFixnum { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1059- Insn :: ArrayPop { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1060- Insn :: ArrayLength { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1061- Insn :: HashAref { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1062- Insn :: NewHash { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1063- Insn :: HashDup { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1064- Insn :: NewRange { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1065- Insn :: NewRangeFixnum { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1066- Insn :: ObjectAlloc { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1067- Insn :: ObjectAllocClass { class, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1068- & Insn :: CCallWithFrame { return_type, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1069- Insn :: CCall { return_type, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1070- & Insn :: CCallVariadic { return_type, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1071- Insn :: GuardType { val, guard_type, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1072- Insn :: GuardTypeNot { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1073- Insn :: GuardBitEquals { val, expected, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1074- Insn :: GuardShape { val, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1075- Insn :: GuardNotFrozen { recv, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1076- Insn :: GuardLess { left, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1077- Insn :: GuardGreaterEq { left, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1078- Insn :: FixnumAdd { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1079- Insn :: FixnumSub { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1080- Insn :: FixnumMult { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1081- Insn :: FixnumDiv { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1082- Insn :: FixnumMod { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1083- Insn :: FixnumEq { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1084- Insn :: FixnumNeq { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1085- Insn :: FixnumLt { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1086- Insn :: FixnumLe { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1087- Insn :: FixnumGt { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1088- Insn :: FixnumGe { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1089- Insn :: FixnumAnd { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1090- Insn :: FixnumOr { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1091- Insn :: FixnumXor { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1092- Insn :: FixnumLShift { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1093- Insn :: FixnumRShift { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1094- Insn :: PutSpecialObject { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1095- Insn :: SendWithoutBlock { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1096- Insn :: SendWithoutBlockDirect { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1097- Insn :: Send { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1098- Insn :: SendForward { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1099- Insn :: InvokeSuper { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1100- Insn :: InvokeBlock { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1101- Insn :: InvokeBuiltin { return_type, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1102- Insn :: Defined { pushval, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1103- Insn :: DefinedIvar { pushval, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1104- Insn :: GetConstantPath { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1105- Insn :: IsBlockGiven => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1106- Insn :: FixnumBitCheck { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1107- Insn :: ArrayMax { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1108- Insn :: ArrayInclude { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1109- Insn :: DupArrayInclude { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1110- Insn :: ArrayHash { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1111- Insn :: GetGlobal { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1112- Insn :: GetIvar { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1113- Insn :: LoadPC => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1114- Insn :: LoadEC => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1115- Insn :: LoadSelf => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1116- & Insn :: LoadField { return_type, .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1117- Insn :: GetSpecialSymbol { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1118- Insn :: GetSpecialNumber { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1119- Insn :: GetClassVar { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1120- Insn :: ToNewArray { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1121- Insn :: ToArray { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1122- Insn :: ObjToString { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1123- Insn :: AnyToString { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1124- Insn :: GetLocal { rest_param : true , .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1125- Insn :: GetLocal { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1126- // The type of Snapshot doesn't really matter; it's never materialized. It's used only
1127- // as a reference for FrameState, which we use to generate side-exit code.
1128- Insn :: Snapshot { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1129- Insn :: IsA { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
1017+ Insn :: Const { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1018+ Insn :: Param => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1019+ Insn :: StringCopy { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1020+ Insn :: NewArray { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1021+ // NewHash's operands may be hashed and compared for equalityEffect::from_bits(effect_sets::Any, effect_sets::Allocator), which could have
1022+ // side-effects.
1023+ // fix newhash which seems to be different than the rest
1024+ // Insn::NewHash { elementsEffect::from_bits(effect_sets::Any, effect_sets::Allocator), .. } => Effect::from_bits(effect_sets::Any, effect_sets::Allocator),
1025+ Insn :: ArrayDup { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1026+ Insn :: HashDup { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1027+ Insn :: Test { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1028+ Insn :: Snapshot { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1029+ Insn :: FixnumAdd { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1030+ Insn :: FixnumSub { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1031+ Insn :: FixnumMult { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1032+ Insn :: FixnumEq { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1033+ Insn :: FixnumNeq { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1034+ Insn :: FixnumLt { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1035+ Insn :: FixnumLe { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1036+ Insn :: FixnumGt { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1037+ Insn :: FixnumGe { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1038+ Insn :: FixnumAnd { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1039+ Insn :: FixnumOr { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1040+ Insn :: FixnumXor { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1041+ Insn :: FixnumLShift { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1042+ Insn :: FixnumRShift { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1043+ Insn :: GetLocal { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1044+ Insn :: IsNil { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1045+ Insn :: LoadPC => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1046+ Insn :: LoadEC => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1047+ Insn :: LoadSelf => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1048+ Insn :: LoadField { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1049+ // Special case, let's fix this
1050+ // Insn::CCall { elidable, .. } => !elidable Effect::from_bits(effect_sets::Any, effect_sets::Allocator),
1051+ // Special case, let's fix this one too
1052+ // Insn::CCallWithFrame { elidable, .. } => !elidable Effect::from_bits(effect_sets::Any, effect_sets::Allocator),
1053+ Insn :: ObjectAllocClass { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1054+ Insn :: NewRangeFixnum { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1055+ Insn :: StringGetbyte { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1056+ Insn :: IsBlockGiven => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1057+ Insn :: BoxFixnum { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1058+ Insn :: BoxBool { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1059+ Insn :: IsBitEqual { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1060+ Insn :: IsA { .. } => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Allocator ) ,
1061+ _ => Effect :: from_bits ( effect_sets:: Any , effect_sets:: Any ) ,
11301062 }
11311063 }
11321064
0 commit comments