Skip to content

Commit 8a43972

Browse files
author
llgoer
committed
更新到2020-01-05版本
1 parent 399d609 commit 8a43972

28 files changed

+6705
-2655
lines changed

Changelog

+7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
2020-01-05:
2+
3+
- always compile the bignum code. Added '--bignum' option to qjs.
4+
- added BigDecimal
5+
- added String.prototype.replaceAll
6+
- misc bug fixes
7+
18
2019-12-21:
29

310
- added nullish coalescing operator (ES2020)

Makefile

+39-106
Original file line numberDiff line numberDiff line change
@@ -119,26 +119,24 @@ else
119119
LDEXPORT=-rdynamic
120120
endif
121121

122-
PROGS=qjs$(EXE) qjsbn$(EXE) qjsc$(EXE) qjsbnc$(EXE) run-test262 run-test262-bn
122+
PROGS=qjs$(EXE) qjsc$(EXE) run-test262
123123
ifneq ($(CROSS_PREFIX),)
124124
QJSC_CC=gcc
125125
QJSC=./host-qjsc
126-
QJSBNC=./host-qjsbnc
127-
PROGS+=$(QJSC) $(QJSBNC)
126+
PROGS+=$(QJSC)
128127
else
129128
QJSC_CC=$(CC)
130129
QJSC=./qjsc$(EXE)
131-
QJSBNC=./qjsbnc$(EXE)
132130
endif
133131
ifndef CONFIG_WIN32
134132
PROGS+=qjscalc
135133
endif
136134
ifdef CONFIG_M32
137-
PROGS+=qjs32 qjs32_s qjsbn32
135+
PROGS+=qjs32 qjs32_s
138136
endif
139-
PROGS+=libquickjs.a libquickjs.bn.a
137+
PROGS+=libquickjs.a
140138
ifdef CONFIG_LTO
141-
PROGS+=libquickjs.lto.a libquickjs.bn.lto.a
139+
PROGS+=libquickjs.lto.a
142140
endif
143141

144142
# examples
@@ -155,13 +153,9 @@ endif
155153

156154
all: $(OBJDIR) $(OBJDIR)/quickjs.check.o $(OBJDIR)/qjs.check.o $(PROGS)
157155

158-
QJS_LIB_OBJS=$(OBJDIR)/quickjs.o $(OBJDIR)/libregexp.o $(OBJDIR)/libunicode.o $(OBJDIR)/cutils.o $(OBJDIR)/quickjs-libc.o
156+
QJS_LIB_OBJS=$(OBJDIR)/quickjs.o $(OBJDIR)/libregexp.o $(OBJDIR)/libunicode.o $(OBJDIR)/libbf.o $(OBJDIR)/cutils.o $(OBJDIR)/quickjs-libc.o
159157

160-
QJSBN_LIB_OBJS=$(patsubst %.o, %.bn.o, $(QJS_LIB_OBJS)) $(OBJDIR)/libbf.bn.o
161-
162-
QJS_OBJS=$(OBJDIR)/qjs.o $(OBJDIR)/repl.o $(QJS_LIB_OBJS)
163-
164-
QJSBN_OBJS=$(OBJDIR)/qjs.bn.o $(OBJDIR)/repl-bn.bn.o $(OBJDIR)/qjscalc.bn.o $(QJSBN_LIB_OBJS)
158+
QJS_OBJS=$(OBJDIR)/qjs.o $(OBJDIR)/repl.o $(OBJDIR)/qjscalc.o $(QJS_LIB_OBJS)
165159

166160
LIBS=-lm
167161
ifndef CONFIG_WIN32
@@ -180,19 +174,12 @@ qjs-debug$(EXE): $(patsubst %.o, %.debug.o, $(QJS_OBJS))
180174
qjsc$(EXE): $(OBJDIR)/qjsc.o $(QJS_LIB_OBJS)
181175
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
182176

183-
qjsbnc$(EXE): $(OBJDIR)/qjsc.bn.o $(QJSBN_LIB_OBJS)
184-
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
185-
186177
ifneq ($(CROSS_PREFIX),)
187178

188179
$(QJSC): $(OBJDIR)/qjsc.host.o \
189180
$(patsubst %.o, %.host.o, $(QJS_LIB_OBJS))
190181
$(HOST_CC) $(LDFLAGS) -o $@ $^ $(LIBS)
191182

192-
$(QJSBNC): $(OBJDIR)/qjsc.bn.host.o \
193-
$(patsubst %.o, %.host.o, $(QJSBN_LIB_OBJS))
194-
$(HOST_CC) $(LDFLAGS) -o $@ $^ $(LIBS)
195-
196183
endif #CROSS_PREFIX
197184

198185
QJSC_DEFINES:=-DCONFIG_CC=\"$(QJSC_CC)\" -DCONFIG_PREFIX=\"$(prefix)\"
@@ -201,8 +188,8 @@ QJSC_DEFINES+=-DCONFIG_LTO
201188
endif
202189
QJSC_HOST_DEFINES:=-DCONFIG_CC=\"$(HOST_CC)\" -DCONFIG_PREFIX=\"$(prefix)\"
203190

204-
$(OBJDIR)/qjsc.o $(OBJDIR)/qjsc.bn.o: CFLAGS+=$(QJSC_DEFINES)
205-
$(OBJDIR)/qjsc.host.o $(OBJDIR)/qjsc.bn.host.o: CFLAGS+=$(QJSC_HOST_DEFINES)
191+
$(OBJDIR)/qjsc.o: CFLAGS+=$(QJSC_DEFINES)
192+
$(OBJDIR)/qjsc.host.o: CFLAGS+=$(QJSC_HOST_DEFINES)
206193

207194
qjs32: $(patsubst %.o, %.m32.o, $(QJS_OBJS))
208195
$(CC) -m32 $(LDFLAGS) $(LDEXPORT) -o $@ $^ $(LIBS)
@@ -211,18 +198,9 @@ qjs32_s: $(patsubst %.o, %.m32s.o, $(QJS_OBJS))
211198
$(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS)
212199
@size $@
213200

214-
qjsbn$(EXE): $(QJSBN_OBJS)
215-
$(CC) $(LDFLAGS) $(LDEXPORT) -o $@ $^ $(LIBS)
216-
217-
qjsbn32: $(patsubst %.o, %.m32.o, $(QJSBN_OBJS))
218-
$(CC) -m32 $(LDFLAGS) $(LDEXPORT) -o $@ $^ $(LIBS)
219-
220-
qjscalc: qjsbn
201+
qjscalc: qjs
221202
ln -sf $< $@
222203

223-
qjsbn-debug$(EXE): $(patsubst %.o, %.debug.o, $(QJSBN_OBJS))
224-
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
225-
226204
ifdef CONFIG_LTO
227205
LTOEXT=.lto
228206
else
@@ -232,29 +210,20 @@ endif
232210
libquickjs$(LTOEXT).a: $(QJS_LIB_OBJS)
233211
$(AR) rcs $@ $^
234212

235-
libquickjs.bn$(LTOEXT).a: $(QJSBN_LIB_OBJS)
236-
$(AR) rcs $@ $^
237-
238213
ifdef CONFIG_LTO
239214
libquickjs.a: $(patsubst %.o, %.nolto.o, $(QJS_LIB_OBJS))
240215
$(AR) rcs $@ $^
241-
242-
libquickjs.bn.a: $(patsubst %.o, %.nolto.o, $(QJSBN_LIB_OBJS))
243-
$(AR) rcs $@ $^
244216
endif # CONFIG_LTO
245217

246218
repl.c: $(QJSC) repl.js
247219
$(QJSC) -c -o $@ -m repl.js
248220

249-
repl-bn.c: $(QJSBNC) repl.js
250-
$(QJSBNC) -c -o $@ -m repl.js
251-
252-
qjscalc.c: $(QJSBNC) qjscalc.js
253-
$(QJSBNC) -c -o $@ qjscalc.js
221+
qjscalc.c: $(QJSC) qjscalc.js
222+
$(QJSC) -fbignum -c -o $@ qjscalc.js
254223

255224
ifneq ($(wildcard unicode/UnicodeData.txt),)
256-
$(OBJDIR)/libunicode.o $(OBJDIR)/libunicode.m32.o $(OBJDIR)/libunicode.m32s.o $(OBJDIR)/libunicode.bn.o $(OBJDIR)/libunicode.bn.m32.o \
257-
$(OBJDIR)/libunicode.nolto.o $(OBJDIR)/libunicode.bn.nolto.o: libunicode-table.h
225+
$(OBJDIR)/libunicode.o $(OBJDIR)/libunicode.m32.o $(OBJDIR)/libunicode.m32s.o \
226+
$(OBJDIR)/libunicode.nolto.o: libunicode-table.h
258227

259228
libunicode-table.h: unicode_gen
260229
./unicode_gen unicode $@
@@ -263,19 +232,13 @@ endif
263232
run-test262: $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS)
264233
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) -lpthread
265234

266-
run-test262-bn: $(OBJDIR)/run-test262.bn.o $(QJSBN_LIB_OBJS)
267-
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) -lpthread
268-
269235
run-test262-debug: $(patsubst %.o, %.debug.o, $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS))
270236
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) -lpthread
271237

272238
run-test262-32: $(patsubst %.o, %.m32.o, $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS))
273239
$(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS) -lpthread
274240

275-
run-test262-bn32: $(patsubst %.o, %.m32.o, $(OBJDIR)/run-test262.bn.o $(QJSBN_LIB_OBJS))
276-
$(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS) -lpthread
277-
278-
# object suffix order: bn, nolto, [m32|m32s]
241+
# object suffix order: nolto, [m32|m32s]
279242

280243
$(OBJDIR)/%.o: %.c | $(OBJDIR)
281244
$(CC) $(CFLAGS_OPT) -c -o $@ $<
@@ -286,33 +249,18 @@ $(OBJDIR)/%.host.o: %.c | $(OBJDIR)
286249
$(OBJDIR)/%.pic.o: %.c | $(OBJDIR)
287250
$(CC) $(CFLAGS_OPT) -fPIC -DJS_SHARED_LIBRARY -c -o $@ $<
288251

289-
$(OBJDIR)/%.bn.o: %.c | $(OBJDIR)
290-
$(CC) $(CFLAGS_OPT) -DCONFIG_BIGNUM -c -o $@ $<
291-
292-
$(OBJDIR)/%.bn.host.o: %.c | $(OBJDIR)
293-
$(HOST_CC) $(CFLAGS_OPT) -DCONFIG_BIGNUM -c -o $@ $<
294-
295252
$(OBJDIR)/%.nolto.o: %.c | $(OBJDIR)
296253
$(CC) $(CFLAGS_NOLTO) -c -o $@ $<
297254

298-
$(OBJDIR)/%.bn.nolto.o: %.c | $(OBJDIR)
299-
$(CC) $(CFLAGS_NOLTO) -DCONFIG_BIGNUM -c -o $@ $<
300-
301255
$(OBJDIR)/%.m32.o: %.c | $(OBJDIR)
302256
$(CC) -m32 $(CFLAGS_OPT) -c -o $@ $<
303257

304258
$(OBJDIR)/%.m32s.o: %.c | $(OBJDIR)
305259
$(CC) -m32 $(CFLAGS_SMALL) -c -o $@ $<
306260

307-
$(OBJDIR)/%.bn.m32.o: %.c | $(OBJDIR)
308-
$(CC) -m32 $(CFLAGS_OPT) -DCONFIG_BIGNUM -c -o $@ $<
309-
310261
$(OBJDIR)/%.debug.o: %.c | $(OBJDIR)
311262
$(CC) $(CFLAGS_DEBUG) -c -o $@ $<
312263

313-
$(OBJDIR)/%.bn.debug.o: %.c | $(OBJDIR)
314-
$(CC) $(CFLAGS_DEBUG) -DCONFIG_BIGNUM -c -o $@ $<
315-
316264
$(OBJDIR)/%.check.o: %.c | $(OBJDIR)
317265
$(CC) $(CFLAGS) -DCONFIG_CHECK_JSVALUE -c -o $@ $<
318266

@@ -326,22 +274,22 @@ unicode_gen: $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o libunicode.c u
326274
$(HOST_CC) $(LDFLAGS) $(CFLAGS) -o $@ $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o
327275

328276
clean:
329-
rm -f repl.c repl-bn.c qjscalc.c out.c
277+
rm -f repl.c qjscalc.c out.c
330278
rm -f *.a *.o *.d *~ jscompress unicode_gen regexp_test $(PROGS)
331279
rm -f hello.c hello_module.c test_fib.c
332280
rm -f examples/*.so tests/*.so
333-
rm -rf $(OBJDIR)/ *.dSYM/ qjs-debug qjsbn-debug
334-
rm -rf run-test262-debug run-test262-32 run-test262-bn32
281+
rm -rf $(OBJDIR)/ *.dSYM/ qjs-debug
282+
rm -rf run-test262-debug run-test262-32
335283

336284
install: all
337285
mkdir -p "$(DESTDIR)$(prefix)/bin"
338-
$(STRIP) qjs qjsbn qjsc qjsbnc
339-
install -m755 qjs qjsbn qjsc qjsbnc "$(DESTDIR)$(prefix)/bin"
340-
ln -sf qjsbn "$(DESTDIR)$(prefix)/bin/qjscalc"
286+
$(STRIP) qjs qjsc
287+
install -m755 qjs qjsc "$(DESTDIR)$(prefix)/bin"
288+
ln -sf qjs "$(DESTDIR)$(prefix)/bin/qjscalc"
341289
mkdir -p "$(DESTDIR)$(prefix)/lib/quickjs"
342-
install -m644 libquickjs.a libquickjs.bn.a "$(DESTDIR)$(prefix)/lib/quickjs"
290+
install -m644 libquickjs.a "$(DESTDIR)$(prefix)/lib/quickjs"
343291
ifdef CONFIG_LTO
344-
install -m644 libquickjs.lto.a libquickjs.bn.lto.a "$(DESTDIR)$(prefix)/lib/quickjs"
292+
install -m644 libquickjs.lto.a "$(DESTDIR)$(prefix)/lib/quickjs"
345293
endif
346294
mkdir -p "$(DESTDIR)$(prefix)/include/quickjs"
347295
install -m644 quickjs.h quickjs-libc.h "$(DESTDIR)$(prefix)/include/quickjs"
@@ -353,7 +301,7 @@ endif
353301
HELLO_SRCS=examples/hello.js
354302
HELLO_OPTS=-fno-string-normalize -fno-map -fno-promise -fno-typedarray \
355303
-fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \
356-
-fno-date -fno-module-loader
304+
-fno-date -fno-module-loader -fno-bigint
357305

358306
hello.c: $(QJSC) $(HELLO_SRCS)
359307
$(QJSC) -e $(HELLO_OPTS) -o $@ $(HELLO_SRCS)
@@ -413,46 +361,41 @@ doc/%.html: doc/%.html.pre
413361
ifndef CONFIG_DARWIN
414362
test: tests/bjson.so examples/point.so
415363
endif
364+
ifdef CONFIG_M32
365+
test: qjs32
366+
endif
416367

417-
test: qjs qjsbn
368+
test: qjs
418369
./qjs tests/test_closure.js
419370
./qjs tests/test_op.js
420371
./qjs tests/test_builtin.js
421372
./qjs tests/test_loop.js
422373
./qjs tests/test_std.js
423374
ifndef CONFIG_DARWIN
424-
./qjs tests/test_bjson.js
375+
./qjs --bignum tests/test_bjson.js
425376
./qjs examples/test_point.js
426377
endif
427-
./qjsbn tests/test_closure.js
428-
./qjsbn tests/test_op.js
429-
./qjsbn tests/test_builtin.js
430-
./qjsbn tests/test_loop.js
431-
./qjsbn tests/test_std.js
432-
./qjsbn --qjscalc tests/test_bignum.js
433-
434-
test-32: qjs32 qjsbn32
378+
./qjs --bignum tests/test_bignum.js
379+
./qjs --qjscalc tests/test_qjscalc.js
380+
ifdef CONFIG_M32
435381
./qjs32 tests/test_closure.js
436382
./qjs32 tests/test_op.js
437383
./qjs32 tests/test_builtin.js
438384
./qjs32 tests/test_loop.js
439385
./qjs32 tests/test_std.js
440-
./qjsbn32 tests/test_closure.js
441-
./qjsbn32 tests/test_op.js
442-
./qjsbn32 tests/test_builtin.js
443-
./qjsbn32 tests/test_loop.js
444-
./qjsbn32 tests/test_std.js
445-
./qjsbn32 --qjscalc tests/test_bignum.js
386+
./qjs32 --bignum tests/test_bignum.js
387+
./qjs32 --qjscalc tests/test_qjscalc.js
388+
endif
446389

447390
stats: qjs qjs32
448391
./qjs -qd
449392
./qjs32 -qd
450393

451394
microbench: qjs
452-
./qjs --std tests/microbench.js
395+
./qjs tests/microbench.js
453396

454397
microbench-32: qjs32
455-
./qjs32 --std tests/microbench.js
398+
./qjs32 tests/microbench.js
456399

457400
# ES5 tests (obsolete)
458401
test2o: run-test262
@@ -480,19 +423,9 @@ test2-update: run-test262
480423
test2-check: run-test262
481424
time ./run-test262 -m -c test262.conf -E -a
482425

483-
# Test262 + BigInt tests
484-
test2bn: run-test262-bn
485-
time ./run-test262-bn -m -c test262bn.conf -a
486-
487-
test2bn-update: run-test262-bn
488-
time ./run-test262-bn -u -c test262bn.conf -a
489-
490-
test2bn-32: run-test262-bn32
491-
time ./run-test262-bn32 -m -c test262bn.conf -a
492-
493-
testall: all test microbench test2o test2 test2bn
426+
testall: all test microbench test2o test2
494427

495-
testall-32: all test-32 microbench-32 test2o-32 test2-32 test2bn-32
428+
testall-32: all test-32 microbench-32 test2o-32 test2-32
496429

497430
testall-complete: testall testall-32
498431

TODO

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
Misc:
2-
- make BigInt available by default
32
- use custom printf to avoid C library compatibility issues
43
- rename CONFIG_ALL_UNICODE, CONFIG_BIGNUM, CONFIG_ATOMICS, CONFIG_CHECK_JSVALUE ?
54
- unify coding style and naming conventions

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2019-12-21
1+
2020-01-05

doc/jsbignum.html

+18-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

doc/jsbignum.pdf

-33 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)