mirror of https://github.com/yasm/yasm.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.4 KiB
56 lines
2.4 KiB
# Python bindings for Yasm: Pyrex input file for value.h |
|
# |
|
# Copyright (C) 2006 Michael Urman, Peter Johnson |
|
# |
|
# Redistribution and use in source and binary forms, with or without |
|
# modification, are permitted provided that the following conditions |
|
# are met: |
|
# 1. Redistributions of source code must retain the above copyright |
|
# notice, this list of conditions and the following disclaimer. |
|
# 2. Redistributions in binary form must reproduce the above copyright |
|
# notice, this list of conditions and the following disclaimer in the |
|
# documentation and/or other materials provided with the distribution. |
|
# |
|
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' |
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE |
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
# POSSIBILITY OF SUCH DAMAGE. |
|
|
|
cdef class Value: |
|
cdef yasm_value value |
|
def __cinit__(self, value=None, size=None): |
|
cdef unsigned int sz |
|
if size is None: |
|
sz = 0 |
|
else: |
|
sz = size; |
|
|
|
yasm_value_initialize(&self.value, NULL, sz) |
|
if value is None: |
|
pass |
|
elif isinstance(value, Expression): |
|
yasm_value_initialize(&self.value, |
|
yasm_expr_copy((<Expression>value).expr), sz) |
|
elif isinstance(value, Symbol): |
|
yasm_value_init_sym(&self.value, (<Symbol>value).sym, sz) |
|
else: |
|
raise TypeError("Invalid value type '%s'" % type(value)) |
|
|
|
def __dealloc__(self): |
|
yasm_value_delete(&self.value) |
|
|
|
def finalize(self, precbc=None): |
|
if precbc is None: |
|
return yasm_value_finalize(&self.value, NULL) |
|
elif isinstance(precbc, Bytecode): |
|
return yasm_value_finalize(&self.value, (<Bytecode>precbc).bc) |
|
else: |
|
raise TypeError("Invalid precbc type '%s'" % type(precbc)) |
|
|
|
|