source: webkit/trunk/Source/JavaScriptCore/DerivedSources.pro@ 83808

Last change on this file since 83808 was 80378, checked in by [email protected], 14 years ago

Bug 55736 - Implement seal/freeze/preventExtensions for normal object types.
Provide basic functionallity from section 15.2.4 of ECMA-262.
This support will need expanding to cover arrays, too.

Reviewed by Sam Weinig.

Source/JavaScriptCore:

Shows a 0.5% progression on SunSpidey, this seems to be due to changing
ObjectConstructor to use a static table.

(JSC::ExecState::objectConstructorTable):

Add a static table for ObjectConstructor.

  • runtime/CommonIdentifiers.h:
  • runtime/JSGlobalData.cpp:

(JSC::JSGlobalData::JSGlobalData):
(JSC::JSGlobalData::~JSGlobalData):

Add a static table for ObjectConstructor.

  • runtime/JSGlobalData.h:
  • runtime/JSGlobalObject.cpp:

(JSC::JSGlobalObject::reset):

Add a static table for ObjectConstructor.

  • runtime/JSObject.cpp:

(JSC::JSObject::seal):
(JSC::JSObject::freeze):
(JSC::JSObject::preventExtensions):

Transition the object's structure.

(JSC::JSObject::defineOwnProperty):

Check isExtensible.

  • runtime/JSObject.h:

(JSC::JSObject::isSealed):
(JSC::JSObject::isFrozen):
(JSC::JSObject::isExtensible):

These wrap method on structure.

(JSC::JSObject::putDirectInternal):

Check isExtensible.

  • runtime/ObjectConstructor.cpp:

(JSC::ObjectConstructor::ObjectConstructor):
(JSC::ObjectConstructor::getOwnPropertySlot):
(JSC::ObjectConstructor::getOwnPropertyDescriptor):

Change ObjectConstructor to use a static table.

(JSC::objectConstructorSeal):
(JSC::objectConstructorFreeze):
(JSC::objectConstructorPreventExtensions):
(JSC::objectConstructorIsSealed):
(JSC::objectConstructorIsFrozen):
(JSC::objectConstructorIsExtensible):

Add new methods on Object.

  • runtime/ObjectConstructor.h:

(JSC::ObjectConstructor::createStructure):

  • runtime/Structure.cpp:

(JSC::Structure::Structure):

init/propagate m_preventExtensions

(JSC::Structure::sealTransition):
(JSC::Structure::freezeTransition):
(JSC::Structure::preventExtensionsTransition):

transition the structure, materializing the property map, setting m_preventExtensions & changing attributes.

(JSC::Structure::isSealed):
(JSC::Structure::isFrozen):

check attributes to detect if object is sealed/frozen.

  • runtime/Structure.h:

(JSC::Structure::isExtensible):

checks the m_preventExtensions flag.

LayoutTests:

Update results - many more tests PASS.
Also adds a new testcase.

  • fast/js/Object-getOwnPropertyNames-expected.txt:
  • fast/js/script-tests/Object-getOwnPropertyNames.js:
  • ietestcenter/Javascript/15.2.3.10-0-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.10-0-2-expected.txt:
  • ietestcenter/Javascript/15.2.3.10-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.10-2-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-0-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-0-2-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-10-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-11-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-12-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-13-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-14-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-15-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-16-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-17-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-18-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-19-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-2-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-20-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-21-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-22-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-23-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-24-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-25-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-26-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-27-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-3-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-4-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-5-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-6-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-7-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-8-expected.txt:
  • ietestcenter/Javascript/15.2.3.11-4-9-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-0-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-0-2-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-10-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-11-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-12-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-13-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-14-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-15-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-16-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-17-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-18-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-19-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-2-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-20-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-21-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-22-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-23-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-24-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-25-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-26-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-27-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-3-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-4-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-5-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-6-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-7-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-8-expected.txt:
  • ietestcenter/Javascript/15.2.3.12-3-9-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-0-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-0-2-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-0-3-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-10-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-11-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-12-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-13-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-14-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-15-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-16-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-17-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-18-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-19-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-2-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-20-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-21-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-3-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-4-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-5-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-6-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-7-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-8-expected.txt:
  • ietestcenter/Javascript/15.2.3.13-2-9-expected.txt:
  • ietestcenter/Javascript/15.2.3.14-2-4-expected.txt:
  • ietestcenter/Javascript/15.2.3.14-2-5-expected.txt:
  • ietestcenter/Javascript/15.2.3.14-2-6-expected.txt:
  • ietestcenter/Javascript/15.2.3.3-4-20-expected.txt:
  • ietestcenter/Javascript/15.2.3.3-4-21-expected.txt:
  • ietestcenter/Javascript/15.2.3.3-4-22-expected.txt:
  • ietestcenter/Javascript/15.2.3.3-4-23-expected.txt:
  • ietestcenter/Javascript/15.2.3.3-4-24-expected.txt:
  • ietestcenter/Javascript/15.2.3.3-4-25-expected.txt:
  • ietestcenter/Javascript/15.2.3.4-4-2-expected.txt:
  • ietestcenter/Javascript/15.2.3.6-4-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.8-0-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.8-0-2-expected.txt:
  • ietestcenter/Javascript/15.2.3.8-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.9-0-1-expected.txt:
  • ietestcenter/Javascript/15.2.3.9-0-2-expected.txt:
  • ietestcenter/Javascript/15.2.3.9-1-expected.txt:
File size: 3.0 KB
Line 
1# DerivedSources - qmake build info
2
3CONFIG -= debug_and_release
4
5TEMPLATE = lib
6TARGET = dummy
7
8QMAKE_EXTRA_TARGETS += generated_files
9
10CONFIG(standalone_package) {
11 isEmpty(JSC_GENERATED_SOURCES_DIR):JSC_GENERATED_SOURCES_DIR = $$PWD/generated
12} else {
13 isEmpty(JSC_GENERATED_SOURCES_DIR):JSC_GENERATED_SOURCES_DIR = generated
14}
15
16LUT_FILES += \
17 runtime/ArrayPrototype.cpp \
18 runtime/DatePrototype.cpp \
19 runtime/JSONObject.cpp \
20 runtime/MathObject.cpp \
21 runtime/NumberConstructor.cpp \
22 runtime/ObjectConstructor.cpp \
23 runtime/RegExpConstructor.cpp \
24 runtime/RegExpObject.cpp \
25 runtime/StringPrototype.cpp
26
27KEYWORDLUT_FILES += \
28 parser/Keywords.table
29
30JIT_STUB_FILES += \
31 jit/JITStubs.cpp
32
33defineTest(addExtraCompiler) {
34 eval($${1}.CONFIG = target_predeps no_link)
35 eval($${1}.variable_out =)
36 eval($${1}.dependency_type = TYPE_C)
37
38 wkScript = $$eval($${1}.wkScript)
39 eval($${1}.depends += $$wkScript)
40
41 export($${1}.CONFIG)
42 export($${1}.variable_out)
43 export($${1}.dependency_type)
44 export($${1}.depends)
45
46 QMAKE_EXTRA_COMPILERS += $$1
47 generated_files.depends += compiler_$${1}_make_all
48 export(QMAKE_EXTRA_COMPILERS)
49 export(generated_files.depends)
50 return(true)
51}
52
53# GENERATOR 1-A: LUT creator
54lut.output = $${JSC_GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}${QMAKE_FILE_BASE}.lut.h
55lut.input = LUT_FILES
56lut.wkScript = $$PWD/create_hash_table
57lut.commands = perl $$lut.wkScript ${QMAKE_FILE_NAME} -i > ${QMAKE_FILE_OUT}
58lut.depends = ${QMAKE_FILE_NAME}
59addExtraCompiler(lut)
60
61# GENERATOR 1-B: particular LUT creator (for 1 file only)
62keywordlut.output = $${JSC_GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}Lexer.lut.h
63keywordlut.input = KEYWORDLUT_FILES
64keywordlut.wkScript = $$PWD/create_hash_table
65keywordlut.commands = perl $$keywordlut.wkScript ${QMAKE_FILE_NAME} -i > ${QMAKE_FILE_OUT}
66keywordlut.depends = ${QMAKE_FILE_NAME}
67addExtraCompiler(keywordlut)
68
69# GENERATOR 2-A: JIT Stub functions for RVCT
70rvctstubs.output = $${JSC_GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}Generated${QMAKE_FILE_BASE}_RVCT.h
71rvctstubs.wkScript = $$PWD/create_jit_stubs
72rvctstubs.commands = perl -i $$rvctstubs.wkScript --prefix RVCT ${QMAKE_FILE_NAME} > ${QMAKE_FILE_OUT}
73rvctstubs.depends = ${QMAKE_FILE_NAME}
74rvctstubs.input = JIT_STUB_FILES
75rvctstubs.CONFIG += no_link
76addExtraCompiler(rvctstubs)
77
78# GENERATOR 2-B: JIT Stub functions for MSVC
79msvcstubs.output = $${JSC_GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}Generated${QMAKE_FILE_BASE}_MSVC.asm
80msvcstubs.wkScript = $$PWD/create_jit_stubs
81msvcstubs.commands = perl -i $$msvcstubs.wkScript --prefix MSVC ${QMAKE_FILE_NAME} > ${QMAKE_FILE_OUT}
82msvcstubs.depends = ${QMAKE_FILE_NAME}
83msvcstubs.input = JIT_STUB_FILES
84msvcstubs.CONFIG += no_link
85addExtraCompiler(msvcstubs)
86
87#GENERATOR: "RegExpJitTables.h": tables used by Yarr
88retgen.output = $$JSC_GENERATED_SOURCES_DIR/RegExpJitTables.h
89retgen.wkScript = $$PWD/create_regex_tables
90retgen.input = retgen.wkScript
91retgen.commands = python $$retgen.wkScript > ${QMAKE_FILE_OUT}
92addExtraCompiler(retgen)
Note: See TracBrowser for help on using the repository browser.