| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library dart2js.ir_builder_task; | 5 library dart2js.ir_builder_task; |
| 6 | 6 |
| 7 import '../closure.dart' as closurelib; | 7 import '../closure.dart' as closurelib; |
| 8 import '../closure.dart' hide ClosureScope; | 8 import '../closure.dart' hide ClosureScope; |
| 9 import '../constants/expressions.dart'; | 9 import '../constants/expressions.dart'; |
| 10 import '../dart_types.dart'; | 10 import '../dart_types.dart'; |
| (...skipping 1674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1685 ast.NodeList arguments, | 1685 ast.NodeList arguments, |
| 1686 CallStructure callStructure, _) { | 1686 CallStructure callStructure, _) { |
| 1687 String nameString = Elements.reconstructConstructorName(constructor); | 1687 String nameString = Elements.reconstructConstructorName(constructor); |
| 1688 Name name = new Name(nameString, constructor.library); | 1688 Name name = new Name(nameString, constructor.library); |
| 1689 return buildStaticNoSuchMethod( | 1689 return buildStaticNoSuchMethod( |
| 1690 new Selector(SelectorKind.CALL, name, callStructure), | 1690 new Selector(SelectorKind.CALL, name, callStructure), |
| 1691 translateDynamicArguments(arguments, callStructure)); | 1691 translateDynamicArguments(arguments, callStructure)); |
| 1692 } | 1692 } |
| 1693 | 1693 |
| 1694 @override | 1694 @override |
| 1695 ir.Primitive errorUnresolvedSet( | 1695 ir.Primitive visitUnresolvedSet( |
| 1696 ast.Send node, | 1696 ast.Send node, |
| 1697 Element element, | 1697 Element element, |
| 1698 ast.Node rhs, _) { | 1698 ast.Node rhs, _) { |
| 1699 return buildStaticNoSuchMethod(elements.getSelector(node), [visit(rhs)]); | 1699 return buildStaticNoSuchMethod(elements.getSelector(node), [visit(rhs)]); |
| 1700 } | 1700 } |
| 1701 | 1701 |
| 1702 @override | 1702 @override |
| 1703 ir.Primitive visitUnresolvedSuperIndex( | 1703 ir.Primitive visitUnresolvedSuperIndex( |
| 1704 ast.Send node, | 1704 ast.Send node, |
| 1705 Element function, | 1705 Element function, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1741 @override | 1741 @override |
| 1742 ir.Primitive errorUndefinedUnaryExpression( | 1742 ir.Primitive errorUndefinedUnaryExpression( |
| 1743 ast.Send node, | 1743 ast.Send node, |
| 1744 ast.Operator operator, | 1744 ast.Operator operator, |
| 1745 ast.Node expression, _) { | 1745 ast.Node expression, _) { |
| 1746 assert(compiler.compilationFailed); | 1746 assert(compiler.compilationFailed); |
| 1747 return irBuilder.buildNullConstant(); | 1747 return irBuilder.buildNullConstant(); |
| 1748 } | 1748 } |
| 1749 | 1749 |
| 1750 @override | 1750 @override |
| 1751 ir.Primitive errorTopLevelFunctionSet( | 1751 ir.Primitive visitClassTypeLiteralSet( |
| 1752 ast.Send node, | |
| 1753 MethodElement function, | |
| 1754 ast.Node rhs, _) { | |
| 1755 return buildStaticNoSuchMethod( | |
| 1756 new Selector.setter(function.name, function.library), | |
| 1757 [visit(rhs)]); | |
| 1758 } | |
| 1759 | |
| 1760 @override | |
| 1761 ir.Primitive errorTopLevelSetterGet( | |
| 1762 ast.Send node, | |
| 1763 FunctionElement setter, _) { | |
| 1764 return buildStaticNoSuchMethod( | |
| 1765 new Selector.getter(setter.name, setter.library), []); | |
| 1766 } | |
| 1767 | |
| 1768 @override | |
| 1769 ir.Primitive errorTopLevelGetterSet( | |
| 1770 ast.SendSet node, | |
| 1771 FunctionElement getter, | |
| 1772 ast.Node rhs, _) { | |
| 1773 return buildStaticNoSuchMethod( | |
| 1774 new Selector.setter(getter.name, getter.library), | |
| 1775 [visit(rhs)]); | |
| 1776 } | |
| 1777 | |
| 1778 @override | |
| 1779 ir.Primitive errorTopLevelSetterInvoke( | |
| 1780 ast.Send node, | |
| 1781 FunctionElement setter, | |
| 1782 ast.NodeList arguments, | |
| 1783 CallStructure callStructure, _) { | |
| 1784 return buildStaticNoSuchMethod( | |
| 1785 new Selector.getter(setter.name, setter.library), []); | |
| 1786 } | |
| 1787 | |
| 1788 @override | |
| 1789 ir.Primitive errorClassTypeLiteralSet( | |
| 1790 ast.SendSet node, | 1752 ast.SendSet node, |
| 1791 TypeConstantExpression constant, | 1753 TypeConstantExpression constant, |
| 1792 ast.Node rhs, _) { | 1754 ast.Node rhs, _) { |
| 1793 InterfaceType type = constant.type; | 1755 InterfaceType type = constant.type; |
| 1794 ClassElement element = type.element; | 1756 ClassElement element = type.element; |
| 1795 return buildStaticNoSuchMethod( | 1757 return buildStaticNoSuchMethod( |
| 1796 new Selector.setter(element.name, element.library), [visit(rhs)]); | 1758 new Selector.setter(element.name, element.library), [visit(rhs)]); |
| 1797 } | 1759 } |
| 1798 | 1760 |
| 1799 @override | 1761 @override |
| 1800 ir.Primitive errorTypedefTypeLiteralSet( | 1762 ir.Primitive visitTypedefTypeLiteralSet( |
| 1801 ast.SendSet node, | 1763 ast.SendSet node, |
| 1802 TypeConstantExpression constant, | 1764 TypeConstantExpression constant, |
| 1803 ast.Node rhs, _) { | 1765 ast.Node rhs, _) { |
| 1804 TypedefType type = constant.type; | 1766 TypedefType type = constant.type; |
| 1805 TypedefElement element = type.element; | 1767 TypedefElement element = type.element; |
| 1806 return buildStaticNoSuchMethod( | 1768 return buildStaticNoSuchMethod( |
| 1807 new Selector.setter(element.name, element.library), [visit(rhs)]); | 1769 new Selector.setter(element.name, element.library), [visit(rhs)]); |
| 1808 } | 1770 } |
| 1809 | 1771 |
| 1810 @override | 1772 @override |
| 1811 ir.Primitive errorTypeVariableTypeLiteralSet( | 1773 ir.Primitive visitTypeVariableTypeLiteralSet( |
| 1812 ast.SendSet node, | 1774 ast.SendSet node, |
| 1813 TypeVariableElement element, | 1775 TypeVariableElement element, |
| 1814 ast.Node rhs, _) { | 1776 ast.Node rhs, _) { |
| 1815 return buildStaticNoSuchMethod( | 1777 return buildStaticNoSuchMethod( |
| 1816 new Selector.setter(element.name, element.library), [visit(rhs)]); | 1778 new Selector.setter(element.name, element.library), [visit(rhs)]); |
| 1817 } | 1779 } |
| 1818 | 1780 |
| 1819 @override | 1781 @override |
| 1820 ir.Primitive errorDynamicTypeLiteralSet( | 1782 ir.Primitive visitDynamicTypeLiteralSet( |
| 1821 ast.SendSet node, | 1783 ast.SendSet node, |
| 1822 ConstantExpression constant, | 1784 ConstantExpression constant, |
| 1823 ast.Node rhs, _) { | 1785 ast.Node rhs, _) { |
| 1824 return buildStaticNoSuchMethod( | 1786 return buildStaticNoSuchMethod( |
| 1825 new Selector.setter('dynamic', null), [visit(rhs)]); | 1787 new Selector.setter('dynamic', null), [visit(rhs)]); |
| 1826 } | 1788 } |
| 1827 | 1789 |
| 1828 @override | 1790 @override |
| 1829 ir.Primitive visitAbstractClassConstructorInvoke( | 1791 ir.Primitive visitAbstractClassConstructorInvoke( |
| 1830 ast.NewExpression node, | 1792 ast.NewExpression node, |
| 1831 ConstructorElement element, | 1793 ConstructorElement element, |
| 1832 InterfaceType type, | 1794 InterfaceType type, |
| 1833 ast.NodeList arguments, | 1795 ast.NodeList arguments, |
| 1834 CallStructure callStructure, _) { | 1796 CallStructure callStructure, _) { |
| 1835 return buildAbstractClassInstantiationError(element.enclosingClass); | 1797 return buildAbstractClassInstantiationError(element.enclosingClass); |
| 1836 } | 1798 } |
| 1837 | 1799 |
| 1838 @override | 1800 @override |
| 1839 ir.Primitive errorFinalLocalVariableSet( | 1801 ir.Primitive handleFinalStaticFieldSet( |
| 1840 ast.SendSet node, | |
| 1841 LocalVariableElement variable, | |
| 1842 ast.Node rhs, _) { | |
| 1843 Selector selector = new Selector.setter(variable.name, null); | |
| 1844 return buildStaticNoSuchMethod(selector, [visit(rhs)]); | |
| 1845 } | |
| 1846 | |
| 1847 @override | |
| 1848 ir.Primitive errorFinalParameterSet( | |
| 1849 ast.SendSet node, | |
| 1850 ParameterElement parameter, | |
| 1851 ast.Node rhs, _) { | |
| 1852 Selector selector = new Selector.setter(parameter.name, null); | |
| 1853 return buildStaticNoSuchMethod(selector, [visit(rhs)]); | |
| 1854 } | |
| 1855 | |
| 1856 @override | |
| 1857 ir.Primitive errorFinalStaticFieldSet( | |
| 1858 ast.SendSet node, | 1802 ast.SendSet node, |
| 1859 FieldElement field, | 1803 FieldElement field, |
| 1860 ast.Node rhs, _) { | 1804 ast.Node rhs, _) { |
| 1861 // TODO(asgerf): Include class name somehow? | 1805 // TODO(asgerf): Include class name somehow for static class members? |
| 1862 return buildStaticNoSuchMethod( | 1806 return buildStaticNoSuchMethod( |
| 1863 new Selector.setter(field.name, field.library), | 1807 new Selector.setter(field.name, field.library), |
| 1864 [visit(rhs)]); | 1808 [visit(rhs)]); |
| 1865 } | 1809 } |
| 1866 | 1810 |
| 1867 @override | 1811 @override |
| 1868 ir.Primitive errorFinalSuperFieldSet( | 1812 ir.Primitive visitFinalSuperFieldSet( |
| 1869 ast.SendSet node, | 1813 ast.SendSet node, |
| 1870 FieldElement field, | 1814 FieldElement field, |
| 1871 ast.Node rhs, _) { | 1815 ast.Node rhs, _) { |
| 1872 Selector selector = useSelectorTypeOfNode( | 1816 Selector selector = useSelectorTypeOfNode( |
| 1873 new Selector.setter(field.name, field.library), | 1817 new Selector.setter(field.name, field.library), |
| 1874 node); | 1818 node); |
| 1875 return buildInstanceNoSuchMethod(selector, [visit(rhs)]); | 1819 return buildInstanceNoSuchMethod(selector, [visit(rhs)]); |
| 1876 } | 1820 } |
| 1877 | 1821 |
| 1878 @override | 1822 @override |
| 1879 ir.Primitive errorFinalTopLevelFieldSet( | 1823 ir.Primitive handleImmutableLocalSet( |
| 1880 ast.SendSet node, | 1824 ast.SendSet node, |
| 1881 FieldElement field, | 1825 LocalElement local, |
| 1882 ast.Node rhs, _) { | 1826 ast.Node rhs, _) { |
| 1883 return buildStaticNoSuchMethod( | 1827 return buildStaticNoSuchMethod( |
| 1884 new Selector.setter(field.name, field.library), | 1828 new Selector.setter(local.name, null), |
| 1885 [visit(rhs)]); | 1829 [visit(rhs)]); |
| 1886 } | 1830 } |
| 1887 | 1831 |
| 1888 @override | 1832 @override |
| 1889 ir.Primitive errorLocalFunctionSet( | 1833 ir.Primitive handleStaticFunctionSet( |
| 1890 ast.SendSet node, | |
| 1891 LocalFunctionElement function, | |
| 1892 ast.Node rhs, _) { | |
| 1893 return buildStaticNoSuchMethod( | |
| 1894 new Selector.setter(function.name, null), | |
| 1895 [visit(rhs)]); | |
| 1896 } | |
| 1897 | |
| 1898 @override | |
| 1899 ir.Primitive errorStaticFunctionSet( | |
| 1900 ast.Send node, | 1834 ast.Send node, |
| 1901 MethodElement function, | 1835 MethodElement function, |
| 1902 ast.Node rhs, | 1836 ast.Node rhs, |
| 1903 _) { | 1837 _) { |
| 1904 return buildStaticNoSuchMethod( | 1838 return buildStaticNoSuchMethod( |
| 1905 new Selector.setter(function.name, function.library), | 1839 new Selector.setter(function.name, function.library), |
| 1906 [visit(rhs)]); | 1840 [visit(rhs)]); |
| 1907 } | 1841 } |
| 1908 | 1842 |
| 1909 @override | 1843 @override |
| 1910 ir.Primitive errorStaticGetterSet( | 1844 ir.Primitive handleStaticGetterSet( |
| 1911 ast.SendSet node, | 1845 ast.SendSet node, |
| 1912 FunctionElement getter, | 1846 FunctionElement getter, |
| 1913 ast.Node rhs, | 1847 ast.Node rhs, |
| 1914 _) { | 1848 _) { |
| 1915 return buildStaticNoSuchMethod( | 1849 return buildStaticNoSuchMethod( |
| 1916 new Selector.setter(getter.name, getter.library), | 1850 new Selector.setter(getter.name, getter.library), |
| 1917 [visit(rhs)]); | 1851 [visit(rhs)]); |
| 1918 } | 1852 } |
| 1919 | 1853 |
| 1920 @override | 1854 @override |
| 1921 ir.Primitive errorStaticSetterGet( | 1855 ir.Primitive handleStaticSetterGet( |
| 1922 ast.Send node, | 1856 ast.Send node, |
| 1923 FunctionElement setter, | 1857 FunctionElement setter, |
| 1924 _) { | 1858 _) { |
| 1925 return buildStaticNoSuchMethod( | 1859 return buildStaticNoSuchMethod( |
| 1926 new Selector.getter(setter.name, setter.library), | 1860 new Selector.getter(setter.name, setter.library), |
| 1927 []); | 1861 []); |
| 1928 } | 1862 } |
| 1929 | 1863 |
| 1930 @override | 1864 @override |
| 1931 ir.Primitive errorStaticSetterInvoke( | 1865 ir.Primitive handleStaticSetterInvoke( |
| 1932 ast.Send node, | 1866 ast.Send node, |
| 1933 FunctionElement setter, | 1867 FunctionElement setter, |
| 1934 ast.NodeList arguments, | 1868 ast.NodeList arguments, |
| 1935 CallStructure callStructure, _) { | 1869 CallStructure callStructure, _) { |
| 1936 // Translate as a method call. | 1870 // Translate as a method call. |
| 1937 List<ir.Primitive> args = arguments.nodes.mapToList(visit); | 1871 List<ir.Primitive> args = arguments.nodes.mapToList(visit); |
| 1938 Name name = new Name(setter.name, setter.library); | 1872 Name name = new Name(setter.name, setter.library); |
| 1939 return buildStaticNoSuchMethod( | 1873 return buildStaticNoSuchMethod( |
| 1940 new Selector(SelectorKind.CALL, name, callStructure), | 1874 new Selector(SelectorKind.CALL, name, callStructure), |
| 1941 args); | 1875 args); |
| 1942 } | 1876 } |
| 1943 | 1877 |
| 1944 @override | 1878 @override |
| 1945 ir.Primitive errorSuperGetterSet( | 1879 ir.Primitive visitSuperGetterSet( |
| 1946 ast.SendSet node, | 1880 ast.SendSet node, |
| 1947 FunctionElement getter, | 1881 FunctionElement getter, |
| 1948 ast.Node rhs, | 1882 ast.Node rhs, |
| 1949 _) { | 1883 _) { |
| 1950 Selector selector = useSelectorTypeOfNode( | 1884 Selector selector = useSelectorTypeOfNode( |
| 1951 new Selector.setter(getter.name, getter.library), | 1885 new Selector.setter(getter.name, getter.library), |
| 1952 node); | 1886 node); |
| 1953 return buildInstanceNoSuchMethod(selector, [visit(rhs)]); | 1887 return buildInstanceNoSuchMethod(selector, [visit(rhs)]); |
| 1954 } | 1888 } |
| 1955 | 1889 |
| 1956 @override | 1890 @override |
| 1957 ir.Primitive errorSuperMethodSet( | 1891 ir.Primitive visitSuperMethodSet( |
| 1958 ast.Send node, | 1892 ast.Send node, |
| 1959 MethodElement method, | 1893 MethodElement method, |
| 1960 ast.Node rhs, | 1894 ast.Node rhs, |
| 1961 _) { | 1895 _) { |
| 1962 Selector selector = useSelectorTypeOfNode( | 1896 Selector selector = useSelectorTypeOfNode( |
| 1963 new Selector.setter(method.name, method.library), | 1897 new Selector.setter(method.name, method.library), |
| 1964 node); | 1898 node); |
| 1965 return buildInstanceNoSuchMethod(selector, [visit(rhs)]); | 1899 return buildInstanceNoSuchMethod(selector, [visit(rhs)]); |
| 1966 } | 1900 } |
| 1967 | 1901 |
| 1968 @override | 1902 @override |
| 1969 ir.Primitive errorSuperSetterGet( | 1903 ir.Primitive visitSuperSetterGet( |
| 1970 ast.Send node, | 1904 ast.Send node, |
| 1971 FunctionElement setter, _) { | 1905 FunctionElement setter, _) { |
| 1972 Selector selector = useSelectorTypeOfNode( | 1906 Selector selector = useSelectorTypeOfNode( |
| 1973 new Selector.setter(setter.name, setter.library), | 1907 new Selector.setter(setter.name, setter.library), |
| 1974 node); | 1908 node); |
| 1975 return buildInstanceNoSuchMethod(selector, []); | 1909 return buildInstanceNoSuchMethod(selector, []); |
| 1976 } | 1910 } |
| 1977 | 1911 |
| 1978 @override | 1912 @override |
| 1979 ir.Primitive errorSuperSetterInvoke( | 1913 ir.Primitive visitSuperSetterInvoke( |
| 1980 ast.Send node, | 1914 ast.Send node, |
| 1981 FunctionElement setter, | 1915 FunctionElement setter, |
| 1982 ast.NodeList arguments, | 1916 ast.NodeList arguments, |
| 1983 CallStructure callStructure, _) { | 1917 CallStructure callStructure, _) { |
| 1984 List<ir.Primitive> args = | 1918 List<ir.Primitive> args = |
| 1985 translateDynamicArguments(arguments, callStructure); | 1919 translateDynamicArguments(arguments, callStructure); |
| 1986 Name name = new Name(setter.name, setter.library); | 1920 Name name = new Name(setter.name, setter.library); |
| 1987 Selector selector = useSelectorTypeOfNode( | 1921 Selector selector = useSelectorTypeOfNode( |
| 1988 new Selector(SelectorKind.CALL, name, callStructure), | 1922 new Selector(SelectorKind.CALL, name, callStructure), |
| 1989 node); | 1923 node); |
| (...skipping 1148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3138 node.body = replacementFor(node.body); | 3072 node.body = replacementFor(node.body); |
| 3139 } | 3073 } |
| 3140 } | 3074 } |
| 3141 | 3075 |
| 3142 /// Visit a just-deleted subterm and unlink all [Reference]s in it. | 3076 /// Visit a just-deleted subterm and unlink all [Reference]s in it. |
| 3143 class RemovalVisitor extends ir.RecursiveVisitor { | 3077 class RemovalVisitor extends ir.RecursiveVisitor { |
| 3144 processReference(ir.Reference reference) { | 3078 processReference(ir.Reference reference) { |
| 3145 reference.unlink(); | 3079 reference.unlink(); |
| 3146 } | 3080 } |
| 3147 } | 3081 } |
| OLD | NEW |