python fixes and test
This commit is contained in:
Родитель
b74419d19e
Коммит
965d44dc69
|
@ -29,6 +29,10 @@ var Library = {
|
|||
__print__(Pointer_stringify(p) + '\n');
|
||||
},
|
||||
|
||||
fputc: function(chr, stream) {
|
||||
__print__(String.fromCharCode(chr));
|
||||
},
|
||||
|
||||
putchar: function(p) {
|
||||
__print__(String.fromCharCode(p));
|
||||
},
|
||||
|
@ -55,8 +59,8 @@ var Library = {
|
|||
},
|
||||
|
||||
fwrite: function(ptr, size, count, stream) {
|
||||
print('[fwrite] ' + Pointer_stringify(ptr).slice(0,count));
|
||||
return count; // or 0?
|
||||
__print__(intArrayToString(Array_copy(ptr, count)));
|
||||
return count;
|
||||
},
|
||||
|
||||
fclose: function(stream) {
|
||||
|
@ -85,6 +89,9 @@ var Library = {
|
|||
return 0; // XXX
|
||||
},
|
||||
|
||||
clearerr: function(stream) {
|
||||
},
|
||||
|
||||
// stdlib.h
|
||||
|
||||
abs: 'Math.abs',
|
||||
|
|
100
src/preamble.js
100
src/preamble.js
|
@ -152,15 +152,11 @@ function Pointer_make(slab, pos, allocator) {
|
|||
}
|
||||
|
||||
function Pointer_stringify(ptr) {
|
||||
ptr = Pointer_niceify(ptr);
|
||||
|
||||
var ret = "";
|
||||
var i = 0;
|
||||
var t;
|
||||
while (1) {
|
||||
// if ((ptr.pos + i) >= ptr.slab.length) { return "<< Invalid read: " + (ptr.pos+i) + " : " + ptr.slab.length + " >>"; } else {}
|
||||
if ((ptr.pos+i) >= ptr.slab.length) { break; } else {}
|
||||
t = String.fromCharCode(ptr.slab[ptr.pos + i]);
|
||||
t = String.fromCharCode(IHEAP[ptr + i]);
|
||||
if (t == "\0") { break; } else {}
|
||||
ret += t;
|
||||
i += 1;
|
||||
|
@ -263,48 +259,54 @@ function __formatString() {
|
|||
while (curr) { // Note: should be curr != 0, technically. But this helps catch bugs with undefineds
|
||||
curr = IHEAP[textIndex];
|
||||
next = IHEAP[textIndex+1];
|
||||
if (curr == '%'.charCodeAt(0) && ['d', 'u', 'f', '.'].indexOf(String.fromCharCode(next)) != -1) {
|
||||
var currArg;
|
||||
var argText;
|
||||
// Handle very very simply formatting, namely only %.Xf
|
||||
if (next == '.'.charCodeAt(0)) {
|
||||
var limit = 0;
|
||||
while(1) {
|
||||
var limitChr = IHEAP[textIndex+2];
|
||||
if (!(limitChr >= '0'.charCodeAt(0) && limitChr <= '9'.charCodeAt(0))) break;
|
||||
limit *= 10;
|
||||
limit += limitChr - '0'.charCodeAt(0);
|
||||
textIndex++;
|
||||
}
|
||||
textIndex--;
|
||||
if (curr == '%'.charCodeAt(0)) {
|
||||
if (next == 'l'.charCodeAt(0)) {
|
||||
textIndex++;
|
||||
next = IHEAP[textIndex+1];
|
||||
currArg = getNextArg(next);
|
||||
argText = String(+currArg); // +: boolean=>int
|
||||
var dotIndex = argText.indexOf('.');
|
||||
if (dotIndex == -1) {
|
||||
dotIndex = argText.length;
|
||||
argText += '.';
|
||||
}
|
||||
argText += '00000000000'; // padding
|
||||
argText = argText.substr(0, dotIndex+1+limit);
|
||||
textIndex += 2;
|
||||
} else if (next == 'u'.charCodeAt(0)) {
|
||||
currArg = getNextArg(next);
|
||||
argText = String(unSign(currArg, 32));
|
||||
} else {
|
||||
currArg = getNextArg(next);
|
||||
argText = String(+currArg); // +: boolean=>int
|
||||
}
|
||||
argText.split('').forEach(function(chr) {
|
||||
ret.push(chr.charCodeAt(0));
|
||||
});
|
||||
textIndex += 2;
|
||||
} else if (curr == '%'.charCodeAt(0) && next == 's'.charCodeAt(0)) {
|
||||
ret = ret.concat(String_copy(getNextArg(next)));
|
||||
textIndex += 2;
|
||||
} else if (curr == '%'.charCodeAt(0) && next == 'c'.charCodeAt(0)) {
|
||||
ret = ret.concat(getNextArg(next));
|
||||
textIndex += 2;
|
||||
if (['d', 'u', 'f', '.'].indexOf(String.fromCharCode(next)) != -1) {
|
||||
var currArg;
|
||||
var argText;
|
||||
// Handle very very simply formatting, namely only %.Xf
|
||||
if (next == '.'.charCodeAt(0)) {
|
||||
var limit = 0;
|
||||
while(1) {
|
||||
var limitChr = IHEAP[textIndex+2];
|
||||
if (!(limitChr >= '0'.charCodeAt(0) && limitChr <= '9'.charCodeAt(0))) break;
|
||||
limit *= 10;
|
||||
limit += limitChr - '0'.charCodeAt(0);
|
||||
textIndex++;
|
||||
}
|
||||
textIndex--;
|
||||
next = IHEAP[textIndex+1];
|
||||
currArg = getNextArg(next);
|
||||
argText = String(+currArg); // +: boolean=>int
|
||||
var dotIndex = argText.indexOf('.');
|
||||
if (dotIndex == -1) {
|
||||
dotIndex = argText.length;
|
||||
argText += '.';
|
||||
}
|
||||
argText += '00000000000'; // padding
|
||||
argText = argText.substr(0, dotIndex+1+limit);
|
||||
textIndex += 2;
|
||||
} else if (next == 'u'.charCodeAt(0)) {
|
||||
currArg = getNextArg(next);
|
||||
argText = String(unSign(currArg, 32));
|
||||
} else {
|
||||
currArg = getNextArg(next);
|
||||
argText = String(+currArg); // +: boolean=>int
|
||||
}
|
||||
argText.split('').forEach(function(chr) {
|
||||
ret.push(chr.charCodeAt(0));
|
||||
});
|
||||
textIndex += 2;
|
||||
} else if (next == 's'.charCodeAt(0)) {
|
||||
ret = ret.concat(String_copy(getNextArg(next)));
|
||||
textIndex += 2;
|
||||
} else if (next == 'c'.charCodeAt(0)) {
|
||||
ret = ret.concat(getNextArg(next));
|
||||
textIndex += 2;
|
||||
}
|
||||
} else {
|
||||
ret.push(curr);
|
||||
textIndex += 1;
|
||||
|
@ -418,6 +420,14 @@ function intArrayFromString(stringy) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
function intArrayToString(array) {
|
||||
var ret = '';
|
||||
for (var i = 0; i < array.length; i++) {
|
||||
ret += String.fromCharCode(array[i]);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Converts a value we have as signed, into an unsigned value. For
|
||||
// example, -1 in int32 would be a very large number as unsigned.
|
||||
function unSign(value, bits) {
|
||||
|
|
|
@ -0,0 +1,279 @@
|
|||
A. HISTORY OF THE SOFTWARE
|
||||
==========================
|
||||
|
||||
Python was created in the early 1990s by Guido van Rossum at Stichting
|
||||
Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
|
||||
as a successor of a language called ABC. Guido remains Python's
|
||||
principal author, although it includes many contributions from others.
|
||||
|
||||
In 1995, Guido continued his work on Python at the Corporation for
|
||||
National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
|
||||
in Reston, Virginia where he released several versions of the
|
||||
software.
|
||||
|
||||
In May 2000, Guido and the Python core development team moved to
|
||||
BeOpen.com to form the BeOpen PythonLabs team. In October of the same
|
||||
year, the PythonLabs team moved to Digital Creations (now Zope
|
||||
Corporation, see http://www.zope.com). In 2001, the Python Software
|
||||
Foundation (PSF, see http://www.python.org/psf/) was formed, a
|
||||
non-profit organization created specifically to own Python-related
|
||||
Intellectual Property. Zope Corporation is a sponsoring member of
|
||||
the PSF.
|
||||
|
||||
All Python releases are Open Source (see http://www.opensource.org for
|
||||
the Open Source Definition). Historically, most, but not all, Python
|
||||
releases have also been GPL-compatible; the table below summarizes
|
||||
the various releases.
|
||||
|
||||
Release Derived Year Owner GPL-
|
||||
from compatible? (1)
|
||||
|
||||
0.9.0 thru 1.2 1991-1995 CWI yes
|
||||
1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
|
||||
1.6 1.5.2 2000 CNRI no
|
||||
2.0 1.6 2000 BeOpen.com no
|
||||
1.6.1 1.6 2001 CNRI yes (2)
|
||||
2.1 2.0+1.6.1 2001 PSF no
|
||||
2.0.1 2.0+1.6.1 2001 PSF yes
|
||||
2.1.1 2.1+2.0.1 2001 PSF yes
|
||||
2.2 2.1.1 2001 PSF yes
|
||||
2.1.2 2.1.1 2002 PSF yes
|
||||
2.1.3 2.1.2 2002 PSF yes
|
||||
2.2.1 2.2 2002 PSF yes
|
||||
2.2.2 2.2.1 2002 PSF yes
|
||||
2.2.3 2.2.2 2003 PSF yes
|
||||
2.3 2.2.2 2002-2003 PSF yes
|
||||
2.3.1 2.3 2002-2003 PSF yes
|
||||
2.3.2 2.3.1 2002-2003 PSF yes
|
||||
2.3.3 2.3.2 2002-2003 PSF yes
|
||||
2.3.4 2.3.3 2004 PSF yes
|
||||
2.3.5 2.3.4 2005 PSF yes
|
||||
2.4 2.3 2004 PSF yes
|
||||
2.4.1 2.4 2005 PSF yes
|
||||
2.4.2 2.4.1 2005 PSF yes
|
||||
2.4.3 2.4.2 2006 PSF yes
|
||||
2.4.4 2.4.3 2006 PSF yes
|
||||
2.5 2.4 2006 PSF yes
|
||||
2.5.1 2.5 2007 PSF yes
|
||||
2.5.2 2.5.1 2008 PSF yes
|
||||
2.5.3 2.5.2 2008 PSF yes
|
||||
2.6 2.5 2008 PSF yes
|
||||
2.6.1 2.6 2008 PSF yes
|
||||
2.6.2 2.6.1 2009 PSF yes
|
||||
2.6.3 2.6.2 2009 PSF yes
|
||||
2.6.4 2.6.3 2009 PSF yes
|
||||
2.6.5 2.6.4 2010 PSF yes
|
||||
2.7 2.6 2010 PSF yes
|
||||
|
||||
Footnotes:
|
||||
|
||||
(1) GPL-compatible doesn't mean that we're distributing Python under
|
||||
the GPL. All Python licenses, unlike the GPL, let you distribute
|
||||
a modified version without making your changes open source. The
|
||||
GPL-compatible licenses make it possible to combine Python with
|
||||
other software that is released under the GPL; the others don't.
|
||||
|
||||
(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
|
||||
because its license has a choice of law clause. According to
|
||||
CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
|
||||
is "not incompatible" with the GPL.
|
||||
|
||||
Thanks to the many outside volunteers who have worked under Guido's
|
||||
direction to make these releases possible.
|
||||
|
||||
|
||||
B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
|
||||
===============================================================
|
||||
|
||||
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
||||
--------------------------------------------
|
||||
|
||||
1. This LICENSE AGREEMENT is between the Python Software Foundation
|
||||
("PSF"), and the Individual or Organization ("Licensee") accessing and
|
||||
otherwise using this software ("Python") in source or binary form and
|
||||
its associated documentation.
|
||||
|
||||
2. Subject to the terms and conditions of this License Agreement, PSF hereby
|
||||
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
|
||||
analyze, test, perform and/or display publicly, prepare derivative works,
|
||||
distribute, and otherwise use Python alone or in any derivative version,
|
||||
provided, however, that PSF's License Agreement and PSF's notice of copyright,
|
||||
i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
Python Software Foundation; All Rights Reserved" are retained in Python alone or
|
||||
in any derivative version prepared by Licensee.
|
||||
|
||||
3. In the event Licensee prepares a derivative work that is based on
|
||||
or incorporates Python or any part thereof, and wants to make
|
||||
the derivative work available to others as provided herein, then
|
||||
Licensee hereby agrees to include in any such work a brief summary of
|
||||
the changes made to Python.
|
||||
|
||||
4. PSF is making Python available to Licensee on an "AS IS"
|
||||
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
||||
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
||||
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
|
||||
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
6. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
7. Nothing in this License Agreement shall be deemed to create any
|
||||
relationship of agency, partnership, or joint venture between PSF and
|
||||
Licensee. This License Agreement does not grant permission to use PSF
|
||||
trademarks or trade name in a trademark sense to endorse or promote
|
||||
products or services of Licensee, or any third party.
|
||||
|
||||
8. By copying, installing or otherwise using Python, Licensee
|
||||
agrees to be bound by the terms and conditions of this License
|
||||
Agreement.
|
||||
|
||||
|
||||
BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
|
||||
-------------------------------------------
|
||||
|
||||
BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
|
||||
|
||||
1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
|
||||
office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
|
||||
Individual or Organization ("Licensee") accessing and otherwise using
|
||||
this software in source or binary form and its associated
|
||||
documentation ("the Software").
|
||||
|
||||
2. Subject to the terms and conditions of this BeOpen Python License
|
||||
Agreement, BeOpen hereby grants Licensee a non-exclusive,
|
||||
royalty-free, world-wide license to reproduce, analyze, test, perform
|
||||
and/or display publicly, prepare derivative works, distribute, and
|
||||
otherwise use the Software alone or in any derivative version,
|
||||
provided, however, that the BeOpen Python License is retained in the
|
||||
Software, alone or in any derivative version prepared by Licensee.
|
||||
|
||||
3. BeOpen is making the Software available to Licensee on an "AS IS"
|
||||
basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
|
||||
SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
|
||||
AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
|
||||
DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
5. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
6. This License Agreement shall be governed by and interpreted in all
|
||||
respects by the law of the State of California, excluding conflict of
|
||||
law provisions. Nothing in this License Agreement shall be deemed to
|
||||
create any relationship of agency, partnership, or joint venture
|
||||
between BeOpen and Licensee. This License Agreement does not grant
|
||||
permission to use BeOpen trademarks or trade names in a trademark
|
||||
sense to endorse or promote products or services of Licensee, or any
|
||||
third party. As an exception, the "BeOpen Python" logos available at
|
||||
http://www.pythonlabs.com/logos.html may be used according to the
|
||||
permissions granted on that web page.
|
||||
|
||||
7. By copying, installing or otherwise using the software, Licensee
|
||||
agrees to be bound by the terms and conditions of this License
|
||||
Agreement.
|
||||
|
||||
|
||||
CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
|
||||
---------------------------------------
|
||||
|
||||
1. This LICENSE AGREEMENT is between the Corporation for National
|
||||
Research Initiatives, having an office at 1895 Preston White Drive,
|
||||
Reston, VA 20191 ("CNRI"), and the Individual or Organization
|
||||
("Licensee") accessing and otherwise using Python 1.6.1 software in
|
||||
source or binary form and its associated documentation.
|
||||
|
||||
2. Subject to the terms and conditions of this License Agreement, CNRI
|
||||
hereby grants Licensee a nonexclusive, royalty-free, world-wide
|
||||
license to reproduce, analyze, test, perform and/or display publicly,
|
||||
prepare derivative works, distribute, and otherwise use Python 1.6.1
|
||||
alone or in any derivative version, provided, however, that CNRI's
|
||||
License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
|
||||
1995-2001 Corporation for National Research Initiatives; All Rights
|
||||
Reserved" are retained in Python 1.6.1 alone or in any derivative
|
||||
version prepared by Licensee. Alternately, in lieu of CNRI's License
|
||||
Agreement, Licensee may substitute the following text (omitting the
|
||||
quotes): "Python 1.6.1 is made available subject to the terms and
|
||||
conditions in CNRI's License Agreement. This Agreement together with
|
||||
Python 1.6.1 may be located on the Internet using the following
|
||||
unique, persistent identifier (known as a handle): 1895.22/1013. This
|
||||
Agreement may also be obtained from a proxy server on the Internet
|
||||
using the following URL: http://hdl.handle.net/1895.22/1013".
|
||||
|
||||
3. In the event Licensee prepares a derivative work that is based on
|
||||
or incorporates Python 1.6.1 or any part thereof, and wants to make
|
||||
the derivative work available to others as provided herein, then
|
||||
Licensee hereby agrees to include in any such work a brief summary of
|
||||
the changes made to Python 1.6.1.
|
||||
|
||||
4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
|
||||
basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
||||
1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
||||
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
|
||||
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
6. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
7. This License Agreement shall be governed by the federal
|
||||
intellectual property law of the United States, including without
|
||||
limitation the federal copyright law, and, to the extent such
|
||||
U.S. federal law does not apply, by the law of the Commonwealth of
|
||||
Virginia, excluding Virginia's conflict of law provisions.
|
||||
Notwithstanding the foregoing, with regard to derivative works based
|
||||
on Python 1.6.1 that incorporate non-separable material that was
|
||||
previously distributed under the GNU General Public License (GPL), the
|
||||
law of the Commonwealth of Virginia shall govern this License
|
||||
Agreement only as to issues arising under or with respect to
|
||||
Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
|
||||
License Agreement shall be deemed to create any relationship of
|
||||
agency, partnership, or joint venture between CNRI and Licensee. This
|
||||
License Agreement does not grant permission to use CNRI trademarks or
|
||||
trade name in a trademark sense to endorse or promote products or
|
||||
services of Licensee, or any third party.
|
||||
|
||||
8. By clicking on the "ACCEPT" button where indicated, or by copying,
|
||||
installing or otherwise using Python 1.6.1, Licensee agrees to be
|
||||
bound by the terms and conditions of this License Agreement.
|
||||
|
||||
ACCEPT
|
||||
|
||||
|
||||
CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
|
||||
--------------------------------------------------
|
||||
|
||||
Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
|
||||
The Netherlands. All rights reserved.
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose and without fee is hereby granted,
|
||||
provided that the above copyright notice appear in all copies and that
|
||||
both that copyright notice and this permission notice appear in
|
||||
supporting documentation, and that the name of Stichting Mathematisch
|
||||
Centrum or CWI not be used in advertising or publicity pertaining to
|
||||
distribution of the software without specific, written prior
|
||||
permission.
|
||||
|
||||
STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||||
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
|
||||
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
@ -0,0 +1,88 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import with_statement
|
||||
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
CC='..LLVM_GCC_DIR../llvm-gcc'
|
||||
CC_ARG_SKIP = ['-g', '-O1', '-O2', '-O3']
|
||||
CC_ADDITIONAL_ARGS = ['-m32', '-U__i386__', '-U__x86_64__', '-UX87_DOUBLE_ROUNDING', '-UHAVE_GCC_ASM_FOR_X87']
|
||||
|
||||
#CC='llvm-gcc'
|
||||
#CC_ARG_SKIP = ['-g', '-O1', '-O2', '-O3']
|
||||
#CC_ADDITIONAL_ARGS = ['-U__i386__', '-U__x86_64__']
|
||||
|
||||
LINK='..LLVM_DIR../llvm-link'
|
||||
ALLOWED_LINK_ARGS = ['-f', '-help', '-o', '-print-after', '-print-after-all', '-print-before',
|
||||
'-print-before-all', '-time-passes', '-v', '-verify-dom-info', '-version' ]
|
||||
#LINK_ARG_SKIP = ['-pthread', '-DNDEBUG', '-g', '-O3', '-Wall', '-Wstrict-prototypes',
|
||||
# '-lpthread', '-ldl', '-lutil', '-Xlinker', '-export-dynamic', '-lm', '-shared']
|
||||
|
||||
# ---------------- End configs -------------
|
||||
|
||||
# no-op if called as ranlibproxy.py
|
||||
if os.path.basename(sys.argv[0])=='ranlibproxy.py':
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
use_linker = True
|
||||
#use_linker = False
|
||||
|
||||
opts = []
|
||||
files = []
|
||||
for arg in sys.argv[1:]:
|
||||
if arg.startswith('-'):
|
||||
opts.append(arg)
|
||||
else:
|
||||
files.append(arg)
|
||||
if arg.endswith('.c'):
|
||||
use_linker = False
|
||||
|
||||
if '--version' in opts:
|
||||
use_linker = False
|
||||
|
||||
if use_linker:
|
||||
call = LINK
|
||||
newargs = []
|
||||
found_o = False
|
||||
for arg in sys.argv[1:]:
|
||||
if os.path.basename(sys.argv[0])=='arproxy.py':
|
||||
if arg.endswith('.a'):
|
||||
newargs.append('-o=%s' % arg)
|
||||
elif arg.endswith('.o'):
|
||||
newargs.append(arg)
|
||||
else:
|
||||
pass
|
||||
continue
|
||||
if found_o:
|
||||
newargs.append('-o=%s' % arg)
|
||||
found_o = False
|
||||
continue
|
||||
if arg.startswith('-'):
|
||||
if arg == '-o':
|
||||
found_o = True
|
||||
continue
|
||||
prefix = arg.split('=')[0]
|
||||
if prefix in ALLOWED_LINK_ARGS:
|
||||
newargs.append(arg)
|
||||
else:
|
||||
# not option, so just append
|
||||
newargs.append(arg)
|
||||
else:
|
||||
call = CC
|
||||
newargs = [ arg for arg in sys.argv[1:] if arg not in CC_ARG_SKIP ] + CC_ADDITIONAL_ARGS
|
||||
if 'conftest.c' not in files:
|
||||
newargs.append('-emit-llvm')
|
||||
if CC=='llvm-gcc':
|
||||
newargs.append('-c')
|
||||
|
||||
with open('ccproxy.log', 'a') as f:
|
||||
f.write('## Called with %s\n' % ' '.join(sys.argv))
|
||||
f.write('** Calling %s %s\n\n' % (call, ' '.join(newargs)))
|
||||
f.flush()
|
||||
|
||||
print "Running:", call, newargs
|
||||
|
||||
os.execvp(call, [call] + newargs)
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -0,0 +1,19 @@
|
|||
This is Python 2.7.1, compiled to .ll as follows:
|
||||
|
||||
Untar Python.
|
||||
In the Python dir, create a ./bin directory
|
||||
Copy ccproxy.py to there
|
||||
CC=./ccproxy.py ../configure --without-threads --without-pymalloc
|
||||
EDIT pyconfig.h (in ./bin), remove
|
||||
HAVE_GCC_ASM_FOR_X87
|
||||
HAVE_SIG* except SIGNAL_H
|
||||
make
|
||||
...it will fail, but can continue manually
|
||||
cd pylibs
|
||||
ar x ../libpython2.7.a
|
||||
cp ../Modules/python.o .
|
||||
LLVM_DIR/llvm-link -o=python.bc *.o
|
||||
LLVM_DIR/llvm-dis -show-annotations python.bc
|
||||
|
||||
Thanks go to rasjidw for helping with this!
|
||||
|
|
@ -80,7 +80,8 @@ class RunnerCore(unittest.TestCase):
|
|||
output = open(filename + '.o.js').read()
|
||||
if output_processor is not None:
|
||||
output_processor(output)
|
||||
if output is not None and 'Traceback' in output: print output; assert 0
|
||||
# Detect compilation crashes and errors
|
||||
if output is not None and 'Traceback' in output and 'in test_' in output: print output; assert 0
|
||||
|
||||
def run_generated_code(self, engine, filename, args=[], check_timeout=True):
|
||||
return timeout_run(Popen(engine + [filename] + ([] if engine == SPIDERMONKEY_ENGINE else ['--']) + args,
|
||||
|
@ -182,10 +183,11 @@ if 'benchmark' not in sys.argv:
|
|||
printf(",");
|
||||
}
|
||||
printf("*\\n");
|
||||
printf("*%ld*\\n", (long)21);
|
||||
return 0;
|
||||
}
|
||||
'''
|
||||
self.do_test(src, '*5,23,10,19,121,1,37,1,0*\n0:-1,1:134217727,2:4194303,3:131071,4:4095,5:127,6:3,7:0,8:0*')
|
||||
self.do_test(src, '*5,23,10,19,121,1,37,1,0*\n0:-1,1:134217727,2:4194303,3:131071,4:4095,5:127,6:3,7:0,8:0*\n*21*')
|
||||
|
||||
def test_unsigned(self):
|
||||
src = '''
|
||||
|
@ -1238,6 +1240,14 @@ if 'benchmark' not in sys.argv:
|
|||
args=['-e', '''print("hello lua world!");print(17);for x = 1,4 do print(x) end;print(10-3)'''],
|
||||
f_opt_ll_file=path_from_root(['tests', 'lua', 'lua.Os.ll']))
|
||||
|
||||
def test_python(self):
|
||||
global RELOOP; RELOOP = 0 # Too slow; we do care about typed arrays and OPTIMIZE though
|
||||
global SAFE_HEAP; SAFE_HEAP = 0 # Has bitfields etc.
|
||||
self.do_ll_test(path_from_root(['tests', 'python', 'python.ll']),
|
||||
'hello python world!\n\n[0, 2, 4, 6]\n\n5\n',
|
||||
args=['-S', '-c' '''print "hello python world!"; print [x*2 for x in range(4)]; t=2; print 10-3-t'''],
|
||||
js_engines=[V8_ENGINE]) # script stack space exceeded in SpiderMonkey, TODO
|
||||
|
||||
### Test cases in separate files
|
||||
|
||||
def test_cases(self):
|
||||
|
|
Загрузка…
Ссылка в новой задаче