示例#1
0
void CompilerLogic :: optimizeEmbeddableBoxing(_CompilerScope& scope, _Compiler& compiler, SNode node, ref_t targetRef, bool assingingMode)
{
   SNode exprNode = node.findSubNodeMask(lxObjectMask);   
   if (exprNode == lxFieldAddress && exprNode.argument > 0 && !assingingMode) {
      bool variable = !isReadonly(scope, targetRef);

      compiler.injectLocalBoxing(exprNode, node.argument);

      node = variable ? lxLocalUnboxing : lxExpression;
   }
   else if (exprNode == lxFieldAddress && node.argument < 4 && node.argument > 0) {
      bool variable = !isReadonly(scope, targetRef);

      compiler.injectLocalBoxing(exprNode, node.argument);

      node = (variable && !assingingMode) ? lxLocalUnboxing : lxExpression;
   }
   else node = lxExpression;
}