merge
[tamarin-stm.git] / eval / eval-util-inlines.h
blobda72f989726915b8bf399e2804d4dc2160e7f9bd
1 /* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
2 /* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
3 /* ***** BEGIN LICENSE BLOCK *****
4 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6 * The contents of this file are subject to the Mozilla Public License Version
7 * 1.1 (the "License"); you may not use this file except in compliance with
8 * the License. You may obtain a copy of the License at
9 * http://www.mozilla.org/MPL/
11 * Software distributed under the License is distributed on an "AS IS" basis,
12 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 * for the specific language governing rights and limitations under the
14 * License.
16 * The Original Code is [Open Source Virtual Machine.].
18 * The Initial Developer of the Original Code is
19 * Adobe System Incorporated.
20 * Portions created by the Initial Developer are Copyright (C) 2008
21 * the Initial Developer. All Rights Reserved.
23 * Contributor(s):
24 * Adobe AS3 Team
26 * Alternatively, the contents of this file may be used under the terms of
27 * either the GNU General Public License Version 2 or later (the "GPL"), or
28 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29 * in which case the provisions of the GPL or the LGPL are applicable instead
30 * of those above. If you wish to allow use of your version of this file only
31 * under the terms of either the GPL or the LGPL, and not to allow others to
32 * use your version of this file under the terms of the MPL, indicate your
33 * decision by deleting the provisions above and replace them with the notice
34 * and other provisions required by the GPL or the LGPL. If you do not delete
35 * the provisions above, a recipient may use your version of this file under
36 * the terms of any one of the MPL, the GPL or the LGPL.
38 * ***** END LICENSE BLOCK ***** */
40 // This file is included into eval.h
41 namespace avmplus {
42 namespace RTC {
44 inline void* Allocator::alloc(size_t nbytes)
46 nbytes = (nbytes + 7) & ~7;
47 if (current_top + nbytes <= current_limit) {
48 void *p = current_top;
49 current_top += nbytes;
50 return p;
52 return allocSlow(nbytes);
55 inline uint8_t* emitU16(uint8_t* out, uint16_t val)
57 *out++ = val & 255;
58 *out++ = (val >> 8) & 255;
59 return out;
62 inline uint8_t* emitU30(uint8_t* out, uint32_t val)
64 AvmAssert(val <= 0x3FFFFFFF);
65 return emitU32(out, val);
68 inline uint8_t* emitS32(uint8_t* out, int32_t val)
70 return emitU32(out, (uint32_t)val);
73 template<class T> inline Seq<T>* SeqBuilder<T>::get() const
75 return items;
78 inline uint32_t ByteBuffer::size() const
80 return last == NULL ? 0 : (uint32_t)(size_rest + (out - last->start));
83 inline void ByteBuffer::makeRoom(uint32_t nbytes)
85 if (out + nbytes > limit)
86 makeRoomSlow(nbytes);
89 inline void ByteBuffer::emitU8(uint8_t v)
91 makeRoom(1);
92 *out++ = v;
95 inline void ByteBuffer::emitS8(int8_t v)
97 emitU8((uint8_t)v);
100 inline void ByteBuffer::emitU16(uint16_t v)
102 makeRoom(2);
103 out = avmplus::RTC::emitU16(out, v);
106 inline void ByteBuffer::emitS24(int32_t v)
108 makeRoom(3);
109 out = avmplus::RTC::emitS24(out, v);
112 inline void ByteBuffer::emitU30(uint32_t v)
114 makeRoom(5);
115 out = avmplus::RTC::emitU30(out, v);
118 inline void ByteBuffer::emitU32(uint32_t v)
120 makeRoom(5);
121 out = avmplus::RTC::emitU32(out, v);
124 inline void ByteBuffer::emitS32(int32_t v)
126 makeRoom(5);
127 out = avmplus::RTC::emitS32(out, v);
130 inline void ByteBuffer::emitDouble(double v)
132 makeRoom(8);
133 out = avmplus::RTC::emitDouble(out, v);
136 inline void ByteBuffer::emitUtf8(uint32_t nbytes, Str* str)
138 makeRoom(nbytes);
139 out = avmplus::RTC::emitUtf8(out, str);
142 inline uint32_t StringBuilder::length()
144 return len;