root/eval/eval-cogen-inlines.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. emitInt
  2. emitUInt
  3. emitDouble
  4. emitString
  5. emitSlotTrait
  6. emitConstTrait
  7. emitMethodTrait
  8. emitNamespace
  9. getTemp
  10. getMaxStack
  11. getMaxScope
  12. getLocalCount
  13. getCodeLength
  14. startCatch
  15. getFlags
  16. binopToOpcode
  17. I_add
  18. I_add_i
  19. I_astype
  20. I_astypelate
  21. I_bitand
  22. I_bitnot
  23. I_bitor
  24. I_bitxor
  25. I_checkfilter
  26. I_coerce
  27. I_coerce_a
  28. I_coerce_s
  29. I_coerce_b
  30. I_coerce_d
  31. I_coerce_i
  32. I_coerce_u
  33. I_convert_o
  34. I_convert_s
  35. I_declocal
  36. I_declocal_i
  37. I_decrement
  38. I_decrement_i
  39. I_divide
  40. I_dup
  41. I_dxns
  42. I_dxnslate
  43. I_equals
  44. I_esc_xattr
  45. I_esc_xelem
  46. I_getglobalscope
  47. I_getglobalslot
  48. I_getlex
  49. I_getouterscope
  50. I_getscopeobject
  51. I_getslot
  52. I_greaterequals
  53. I_greaterthan
  54. I_hasnext
  55. I_ifeq
  56. I_iffalse
  57. I_ifge
  58. I_ifgt
  59. I_ifle
  60. I_iflt
  61. I_ifne
  62. I_ifnge
  63. I_ifngt
  64. I_ifnle
  65. I_ifnlt
  66. I_ifstricteq
  67. I_ifstrictne
  68. I_iftrue
  69. I_in
  70. I_inclocal
  71. I_inclocal_i
  72. I_increment
  73. I_increment_i
  74. I_instanceof
  75. I_istype
  76. I_istypelate
  77. I_jump
  78. I_kill
  79. I_lessequals
  80. I_lessthan
  81. I_lshift
  82. I_modulo
  83. I_multiply
  84. I_multiply_i
  85. I_negate
  86. I_negate_i
  87. I_newactivation
  88. I_newcatch
  89. I_newclass
  90. I_newfunction
  91. I_nextname
  92. I_nextvalue
  93. I_nop
  94. I_not
  95. I_pop
  96. I_popscope
  97. I_pushdouble
  98. I_pushfalse
  99. I_pushint
  100. I_pushnamespace
  101. I_pushnan
  102. I_pushnull
  103. I_pushscope
  104. I_pushshort
  105. I_pushstring
  106. I_pushtrue
  107. I_pushuint
  108. I_pushundefined
  109. I_pushwith
  110. I_returnvalue
  111. I_returnvoid
  112. I_rshift
  113. I_setglobalslot
  114. I_strictequals
  115. I_subtract
  116. I_subtract_i
  117. I_swap
  118. I_throw
  119. I_typeof
  120. I_urshift
  121. I_call
  122. I_construct
  123. I_constructsuper
  124. I_callmethod
  125. I_callstatic
  126. I_callsuper
  127. I_callproperty
  128. I_constructprop
  129. I_callproplex
  130. I_callsupervoid
  131. I_callpropvoid
  132. I_deleteproperty
  133. I_getdescendants
  134. I_getproperty
  135. I_getsuper
  136. I_findproperty
  137. I_findpropstrict
  138. I_initproperty
  139. I_setproperty
  140. I_setsuper
  141. I_hasnext2
  142. I_newarray
  143. I_newobject
  144. I_pushbyte
  145. I_setslot
  146. I_opcode

/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is [Open Source Virtual Machine.].
 *
 * The Initial Developer of the Original Code is
 * Adobe System Incorporated.
 * Portions created by the Initial Developer are Copyright (C) 2008
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *   Adobe AS3 Team
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

// This file is included into eval.h

inline uint32_t Cogen::emitInt(int32_t i) { return abc->addInt(i); }
inline uint32_t Cogen::emitUInt(uint32_t u) { return abc->addUInt(u); }
inline uint32_t Cogen::emitDouble(double d) { return abc->addDouble(d); }
inline uint32_t Cogen::emitString(Str* str) { return abc->addString(str); }
inline uint32_t Cogen::emitSlotTrait(uint32_t name, uint32_t type) { return traits->addTrait(ALLOC(ABCSlotTrait, (name, type, TRAIT_Slot))); }
inline uint32_t Cogen::emitConstTrait(uint32_t name, uint32_t type) { return traits->addTrait(ALLOC(ABCSlotTrait, (name, type, TRAIT_Const))); }
inline uint32_t Cogen::emitMethodTrait(uint32_t name, uint32_t method) { return traits->addTrait(ALLOC(ABCMethodTrait, (name, method))); }
inline uint32_t Cogen::emitNamespace(uint32_t name) { return abc->addNamespace(CONSTANT_Namespace, name); }

inline uint32_t Cogen::getTemp()
{
        return temp_counter++;
}

inline uint32_t Cogen::getMaxStack() const { return max_stack_depth; }
inline uint32_t Cogen::getMaxScope() const { return scope_depth; }
inline uint32_t Cogen::getLocalCount() const { return temp_counter; }
inline uint32_t Cogen::getCodeLength() const { return code.size(); }

inline void Cogen::startCatch()
{
        stack_depth = 1;
        if (stack_depth > max_stack_depth)
                max_stack_depth = stack_depth;
}

inline uint8_t Cogen::getFlags() const 
{
        return traits->getCount() > 0 ? MethodInfo::NEED_ACTIVATION : 0;
}

inline AbcOpcode Cogen::binopToOpcode(Binop op, bool* isNegated)
{
        *isNegated = binopMapping[op].isNegated;
        return (AbcOpcode)(binopMapping[op].abcOpcode);
}

inline void Cogen::I_add() { emitOp(OP_add); }
inline void Cogen::I_add_i() { emitOp(OP_add_i); }
inline void Cogen::I_astype(uint32_t index) { emitOpU30(OP_astype, index); }
inline void Cogen::I_astypelate() { emitOp(OP_astypelate); }
inline void Cogen::I_bitand() { emitOp(OP_bitand); }
inline void Cogen::I_bitnot() { emitOp(OP_bitnot); }
inline void Cogen::I_bitor() { emitOp(OP_bitor); }
inline void Cogen::I_bitxor() { emitOp(OP_bitxor); }
inline void Cogen::I_checkfilter() { emitOp(OP_checkfilter); }
inline void Cogen::I_coerce(uint32_t index) { emitOpU30(OP_coerce, index); }
inline void Cogen::I_coerce_a() { emitOp(OP_coerce_a); }
inline void Cogen::I_coerce_s() { emitOp(OP_coerce_s); }
inline void Cogen::I_coerce_b() { emitOp(OP_coerce_b); }
inline void Cogen::I_coerce_d() { emitOp(OP_coerce_d); }
inline void Cogen::I_coerce_i() { emitOp(OP_coerce_i); }
inline void Cogen::I_coerce_u() { emitOp(OP_coerce_u); }
inline void Cogen::I_convert_o() { emitOp(OP_convert_o); }
inline void Cogen::I_convert_s() { emitOp(OP_convert_s); }
inline void Cogen::I_declocal(uint32_t reg) { emitOpU30(OP_declocal, reg); }
inline void Cogen::I_declocal_i(uint32_t reg) { emitOpU30(OP_declocal_i, reg); }
inline void Cogen::I_decrement() { emitOp(OP_decrement); }
inline void Cogen::I_decrement_i() { emitOp(OP_decrement_i); }
inline void Cogen::I_divide() { emitOp(OP_divide); }
inline void Cogen::I_dup() { emitOp(OP_dup); }
inline void Cogen::I_dxns(uint32_t index) { emitOpU30(OP_dxns, index); }
inline void Cogen::I_dxnslate() { sets_dxns=true; emitOp(OP_dxnslate); }
inline void Cogen::I_equals() { emitOp(OP_equals); }
inline void Cogen::I_esc_xattr() { emitOp(OP_esc_xattr); }
inline void Cogen::I_esc_xelem() { emitOp(OP_esc_xelem); }
inline void Cogen::I_getglobalscope() { emitOp(OP_getglobalscope); }
inline void Cogen::I_getglobalslot(uint32_t index) { emitOpU30(OP_getglobalslot, index); }
inline void Cogen::I_getlex(uint32_t index) { emitOpU30(OP_getlex, index); }
inline void Cogen::I_getouterscope(uint32_t index) { emitOpU30(OP_getouterscope, index); }
inline void Cogen::I_getscopeobject(uint32_t index) { emitOpU30(OP_getscopeobject, index); }
inline void Cogen::I_getslot(uint32_t index) { emitOpU30(OP_getslot, index); }
inline void Cogen::I_greaterequals() { emitOp(OP_greaterequals); }
inline void Cogen::I_greaterthan() { emitOp(OP_greaterthan); }
inline void Cogen::I_hasnext() { emitOp(OP_hasnext); }
inline void Cogen::I_ifeq(Label* label) { emitJump(OP_ifeq, label); }
inline void Cogen::I_iffalse(Label* label) { emitJump(OP_iffalse, label); }
inline void Cogen::I_ifge(Label* label) { emitJump(OP_ifge, label); }
inline void Cogen::I_ifgt(Label* label) { emitJump(OP_ifgt, label); }
inline void Cogen::I_ifle(Label* label) { emitJump(OP_ifle, label); }
inline void Cogen::I_iflt(Label* label) { emitJump(OP_iflt, label); }
inline void Cogen::I_ifne(Label* label) { emitJump(OP_ifne, label); }
inline void Cogen::I_ifnge(Label* label) { emitJump(OP_ifnge, label); }
inline void Cogen::I_ifngt(Label* label) { emitJump(OP_ifngt, label); }
inline void Cogen::I_ifnle(Label* label) { emitJump(OP_ifnle, label); }
inline void Cogen::I_ifnlt(Label* label) { emitJump(OP_ifnlt, label); }
inline void Cogen::I_ifstricteq(Label* label) { emitJump(OP_ifstricteq, label); }
inline void Cogen::I_ifstrictne(Label* label) { emitJump(OP_ifstrictne, label); }
inline void Cogen::I_iftrue(Label* label) { emitJump(OP_iftrue, label); }
inline void Cogen::I_in() { emitOp(OP_in); }
inline void Cogen::I_inclocal(uint32_t reg) { emitOpU30(OP_inclocal, reg); }
inline void Cogen::I_inclocal_i(uint32_t reg) { emitOpU30(OP_inclocal_i, reg); }
inline void Cogen::I_increment() { emitOp(OP_increment); }
inline void Cogen::I_increment_i() { emitOp(OP_increment_i); }
inline void Cogen::I_instanceof() { emitOp(OP_instanceof); }
inline void Cogen::I_istype(uint32_t index) { emitOpU30(OP_istype, index); }
inline void Cogen::I_istypelate() { emitOp(OP_istypelate); }
inline void Cogen::I_jump(Label* label) { emitJump(OP_jump, label); }
inline void Cogen::I_kill(uint32_t index) { emitOpU30(OP_kill, index); }
inline void Cogen::I_lessequals() { emitOp(OP_lessequals); }
inline void Cogen::I_lessthan() { emitOp(OP_lessthan); }
inline void Cogen::I_lshift() { emitOp(OP_lshift); }
inline void Cogen::I_modulo() { emitOp(OP_modulo); }
inline void Cogen::I_multiply() { emitOp(OP_multiply); }
inline void Cogen::I_multiply_i() { emitOp(OP_multiply_i); }
inline void Cogen::I_negate() { emitOp(OP_negate); }
inline void Cogen::I_negate_i() { emitOp(OP_negate_i); }
inline void Cogen::I_newactivation() { need_activation=true; emitOp(OP_newactivation); }
inline void Cogen::I_newcatch(uint32_t index) { emitOpU30(OP_newcatch, index); }
inline void Cogen::I_newclass(uint32_t index) { emitOpU30(OP_newclass, index); }
inline void Cogen::I_newfunction(uint32_t index) { emitOpU30(OP_newfunction, index); }
inline void Cogen::I_nextname() { emitOp(OP_nextname); }
inline void Cogen::I_nextvalue() { emitOp(OP_nextvalue); }
inline void Cogen::I_nop() { emitOp(OP_nop); }
inline void Cogen::I_not() { emitOp(OP_not); }
inline void Cogen::I_pop() { emitOp(OP_pop); }
inline void Cogen::I_popscope() { emitOp(OP_popscope); }
inline void Cogen::I_pushdouble(uint32_t index) { emitOpU30(OP_pushdouble, index); }
inline void Cogen::I_pushfalse() { emitOp(OP_pushfalse); }
inline void Cogen::I_pushint(uint32_t index) { emitOpU30(OP_pushint, index); }
inline void Cogen::I_pushnamespace(uint32_t index) { emitOpU30(OP_pushnamespace, index); }
inline void Cogen::I_pushnan() { emitOp(OP_pushnan); }
inline void Cogen::I_pushnull() { emitOp(OP_pushnull); }
inline void Cogen::I_pushscope() { scope_depth++;  emitOp(OP_pushscope); }
inline void Cogen::I_pushshort(int16_t v) { emitOpS16(OP_pushshort, v); }
inline void Cogen::I_pushstring(uint32_t index) { emitOpU30(OP_pushstring, index); }
inline void Cogen::I_pushtrue() { emitOp(OP_pushtrue); }
inline void Cogen::I_pushuint(uint32_t index) { emitOpU30(OP_pushuint, index); }
inline void Cogen::I_pushundefined() { emitOp(OP_pushundefined); }
inline void Cogen::I_pushwith() { scope_depth++;  emitOp(OP_pushwith); }
inline void Cogen::I_returnvalue() { emitOp(OP_returnvalue); }
inline void Cogen::I_returnvoid() { emitOp(OP_returnvoid); }
inline void Cogen::I_rshift() { emitOp(OP_rshift); }
inline void Cogen::I_setglobalslot(uint32_t index) { emitOpU30(OP_setglobalslot, index); }
inline void Cogen::I_strictequals() { emitOp(OP_strictequals); }
inline void Cogen::I_subtract() { emitOp(OP_subtract); }
inline void Cogen::I_subtract_i() { emitOp(OP_subtract_i); }
inline void Cogen::I_swap() { emitOp(OP_swap); }
inline void Cogen::I_throw() { emitOp(OP_throw); }
inline void Cogen::I_typeof() { emitOp(OP_typeof); }
inline void Cogen::I_urshift() { emitOp(OP_urshift); }

inline void Cogen::I_call(uint32_t nargs) { emitOpU30(OP_call, nargs); }
inline void Cogen::I_construct(uint32_t nargs) { emitOpU30(OP_construct, nargs); }
inline void Cogen::I_constructsuper(uint32_t nargs) { emitOpU30(OP_constructsuper, nargs); }

inline void Cogen::I_callmethod(uint32_t index, uint32_t nargs) { emitOpU30U30(OP_callmethod, index, nargs); }
inline void Cogen::I_callstatic(uint32_t index, uint32_t nargs) { emitOpU30U30(OP_callstatic, index, nargs); }

inline void Cogen::I_callsuper(uint32_t index, uint32_t nargs) { callMN(OP_callsuper, index, nargs); }
inline void Cogen::I_callproperty(uint32_t index, uint32_t nargs) { callMN(OP_callproperty, index, nargs); }
inline void Cogen::I_constructprop(uint32_t index, uint32_t nargs) { callMN(OP_constructprop, index, nargs); }
inline void Cogen::I_callproplex(uint32_t index, uint32_t nargs) { callMN(OP_callproplex, index, nargs); }
inline void Cogen::I_callsupervoid(uint32_t index, uint32_t nargs) { callMN(OP_callsupervoid, index, nargs); }
inline void Cogen::I_callpropvoid(uint32_t index, uint32_t nargs) { callMN(OP_callpropvoid, index, nargs); }

inline void Cogen::I_deleteproperty(uint32_t index) { propU30(OP_deleteproperty, index); }
inline void Cogen::I_getdescendants(uint32_t index) { propU30(OP_getdescendants, index); }
inline void Cogen::I_getproperty(uint32_t index) { propU30(OP_getproperty, index);; }
inline void Cogen::I_getsuper(uint32_t index) { propU30(OP_getsuper, index);; }
inline void Cogen::I_findproperty(uint32_t index) { propU30(OP_findproperty, index); }
inline void Cogen::I_findpropstrict(uint32_t index) { propU30(OP_findpropstrict, index); }
inline void Cogen::I_initproperty(uint32_t index) { propU30(OP_initproperty, index); }
inline void Cogen::I_setproperty(uint32_t index) { propU30(OP_setproperty, index); }
inline void Cogen::I_setsuper(uint32_t index) { propU30(OP_setsuper, index); }

inline void Cogen::I_hasnext2(uint32_t object_reg, uint32_t index_reg) { emitOpU30U30(OP_hasnext2, object_reg, index_reg); }

inline void Cogen::I_newarray(uint32_t nargs) { emitOpU30Special(OP_newarray, nargs, nargs); }
inline void Cogen::I_newobject(uint32_t nargs) { emitOpU30Special(OP_newobject, nargs, 2*nargs); }

inline void Cogen::I_pushbyte(int8_t b) { emitOpS8(OP_pushbyte, b); }

inline void Cogen::I_setslot(uint32_t index) { emitOpU30(OP_setslot, index); }
inline void Cogen::I_opcode(AbcOpcode opcode) { emitOp(opcode); }

/* [<][>][^][v][top][bottom][index][help] */