[Jython-checkins] jython: Set literals.
frank.wierzbicki
jython-checkins at python.org
Wed Mar 7 05:27:21 CET 2012
http://hg.python.org/jython/rev/039641b01639
changeset: 6313:039641b01639
parent: 6308:e49a734162b9
user: Frank Wierzbicki <fwierzbicki at gmail.com>
date: Tue Mar 06 15:27:30 2012 -0800
summary:
Set literals.
files:
ast/Python.asdl | 9 +-
grammar/Python.g | 39 +-
src/org/python/antlr/ast/DictComp.java | 225 ++++++++++
src/org/python/antlr/ast/Set.java | 171 +++++++
src/org/python/antlr/ast/SetComp.java | 197 ++++++++
src/org/python/antlr/ast/VisitorBase.java | 18 +
src/org/python/antlr/ast/VisitorIF.java | 3 +
src/org/python/compiler/CodeCompiler.java | 15 +
src/org/python/core/BaseSet.java | 13 +
src/org/python/core/PySet.java | 4 +
10 files changed, 679 insertions(+), 15 deletions(-)
diff --git a/ast/Python.asdl b/ast/Python.asdl
--- a/ast/Python.asdl
+++ b/ast/Python.asdl
@@ -1,6 +1,6 @@
-- ASDL's five builtin types are identifier, int, string, object, bool
-module Python version "$Revision: 62047 $"
+module Python version "$Revision$"
{
mod = Module(stmt* body)
| Interactive(stmt* body)
@@ -11,7 +11,7 @@
stmt = FunctionDef(identifier name, arguments args,
stmt* body, expr* decorator_list)
- | ClassDef(identifier name, expr* bases, stmt* body, expr *decorator_list)
+ | ClassDef(identifier name, expr* bases, stmt* body, expr* decorator_list)
| Return(expr? value)
| Delete(expr* targets)
@@ -34,7 +34,7 @@
| Assert(expr test, expr? msg)
| Import(alias* names)
- | ImportFrom(identifier module, alias* names, int? level)
+ | ImportFrom(identifier? module, alias* names, int? level)
-- Doesn't capture requirement that locals must be
-- defined if globals is
@@ -56,7 +56,10 @@
| Lambda(arguments args, expr body)
| IfExp(expr test, expr body, expr orelse)
| Dict(expr* keys, expr* values)
+ | Set(expr* elts)
| ListComp(expr elt, comprehension* generators)
+ | SetComp(expr elt, comprehension* generators)
+ | DictComp(expr key, expr value, comprehension* generators)
| GeneratorExp(expr elt, comprehension* generators)
-- the grammar constrains where yield expressions can occur
| Yield(expr? value)
diff --git a/grammar/Python.g b/grammar/Python.g
--- a/grammar/Python.g
+++ b/grammar/Python.g
@@ -131,6 +131,7 @@
import org.python.antlr.ast.Raise;
import org.python.antlr.ast.Repr;
import org.python.antlr.ast.Return;
+import org.python.antlr.ast.Set;
import org.python.antlr.ast.Slice;
import org.python.antlr.ast.Str;
import org.python.antlr.ast.Subscript;
@@ -1660,7 +1661,7 @@
//atom: ('(' [yield_expr|testlist_gexp] ')' |
// '[' [listmaker] ']' |
-// '{' [dictmaker] '}' |
+// '{' [dictorsetmaker] '}' |
// '`' testlist1 '`' |
// NAME | NUMBER | STRING+)
atom
@@ -1699,10 +1700,14 @@
)
RBRACK
| LCURLY
- (dictmaker
+ (dictorsetmaker
{
- etype = new Dict($LCURLY, actions.castExprs($dictmaker.keys),
- actions.castExprs($dictmaker.values));
+ if ($dictorsetmaker.keys != null && $dictorsetmaker.values == null) {
+ etype = new Set($LCURLY, actions.castExprs($dictorsetmaker.keys));
+ } else {
+ etype = new Dict($LCURLY, actions.castExprs($dictorsetmaker.keys),
+ actions.castExprs($dictorsetmaker.values));
+ }
}
|
{
@@ -1946,16 +1951,26 @@
| test[ctype]
;
+//dictorsetmaker: ( (test ':' test (comp_for | (',' test ':' test)* [','])) |
+// (test (comp_for | (',' test)* [','])) )
+
//dictmaker: test ':' test (',' test ':' test)* [',']
-dictmaker
+dictorsetmaker
returns [List keys, List values]
- : k+=test[expr_contextType.Load] COLON v+=test[expr_contextType.Load]
- (options {k=2;}:COMMA k+=test[expr_contextType.Load] COLON v+=test[expr_contextType.Load])*
- (COMMA)?
- {
- $keys = $k;
- $values= $v;
- }
+ : k+=test[expr_contextType.Load]
+ (COLON v+=test[expr_contextType.Load]
+ (options {k=2;}:COMMA k+=test[expr_contextType.Load] COLON v+=test[expr_contextType.Load])*
+ {
+ $keys = $k;
+ $values= $v;
+ }
+ |(COMMA k+=test[expr_contextType.Load])*
+ {
+ $keys = $k;
+ $values = null;
+ }
+ )
+ (COMMA)?
;
//classdef: 'class' NAME ['(' [testlist] ')'] ':' suite
diff --git a/src/org/python/antlr/ast/DictComp.java b/src/org/python/antlr/ast/DictComp.java
new file mode 100644
--- /dev/null
+++ b/src/org/python/antlr/ast/DictComp.java
@@ -0,0 +1,225 @@
+// Autogenerated AST node
+package org.python.antlr.ast;
+import org.antlr.runtime.CommonToken;
+import org.antlr.runtime.Token;
+import org.python.antlr.AST;
+import org.python.antlr.PythonTree;
+import org.python.antlr.adapter.AstAdapters;
+import org.python.antlr.base.excepthandler;
+import org.python.antlr.base.expr;
+import org.python.antlr.base.mod;
+import org.python.antlr.base.slice;
+import org.python.antlr.base.stmt;
+import org.python.core.ArgParser;
+import org.python.core.AstList;
+import org.python.core.Py;
+import org.python.core.PyObject;
+import org.python.core.PyString;
+import org.python.core.PyType;
+import org.python.expose.ExposedGet;
+import org.python.expose.ExposedMethod;
+import org.python.expose.ExposedNew;
+import org.python.expose.ExposedSet;
+import org.python.expose.ExposedType;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+ at ExposedType(name = "_ast.DictComp", base = AST.class)
+public class DictComp extends expr {
+public static final PyType TYPE = PyType.fromClass(DictComp.class);
+ private expr key;
+ public expr getInternalKey() {
+ return key;
+ }
+ @ExposedGet(name = "key")
+ public PyObject getKey() {
+ return key;
+ }
+ @ExposedSet(name = "key")
+ public void setKey(PyObject key) {
+ this.key = AstAdapters.py2expr(key);
+ }
+
+ private expr value;
+ public expr getInternalValue() {
+ return value;
+ }
+ @ExposedGet(name = "value")
+ public PyObject getValue() {
+ return value;
+ }
+ @ExposedSet(name = "value")
+ public void setValue(PyObject value) {
+ this.value = AstAdapters.py2expr(value);
+ }
+
+ private java.util.List<comprehension> generators;
+ public java.util.List<comprehension> getInternalGenerators() {
+ return generators;
+ }
+ @ExposedGet(name = "generators")
+ public PyObject getGenerators() {
+ return new AstList(generators, AstAdapters.comprehensionAdapter);
+ }
+ @ExposedSet(name = "generators")
+ public void setGenerators(PyObject generators) {
+ this.generators = AstAdapters.py2comprehensionList(generators);
+ }
+
+
+ private final static PyString[] fields =
+ new PyString[] {new PyString("key"), new PyString("value"), new PyString("generators")};
+ @ExposedGet(name = "_fields")
+ public PyString[] get_fields() { return fields; }
+
+ private final static PyString[] attributes =
+ new PyString[] {new PyString("lineno"), new PyString("col_offset")};
+ @ExposedGet(name = "_attributes")
+ public PyString[] get_attributes() { return attributes; }
+
+ public DictComp(PyType subType) {
+ super(subType);
+ }
+ public DictComp() {
+ this(TYPE);
+ }
+ @ExposedNew
+ @ExposedMethod
+ public void DictComp___init__(PyObject[] args, String[] keywords) {
+ ArgParser ap = new ArgParser("DictComp", args, keywords, new String[]
+ {"key", "value", "generators", "lineno", "col_offset"}, 3, true);
+ setKey(ap.getPyObject(0, Py.None));
+ setValue(ap.getPyObject(1, Py.None));
+ setGenerators(ap.getPyObject(2, Py.None));
+ int lin = ap.getInt(3, -1);
+ if (lin != -1) {
+ setLineno(lin);
+ }
+
+ int col = ap.getInt(4, -1);
+ if (col != -1) {
+ setLineno(col);
+ }
+
+ }
+
+ public DictComp(PyObject key, PyObject value, PyObject generators) {
+ setKey(key);
+ setValue(value);
+ setGenerators(generators);
+ }
+
+ public DictComp(Token token, expr key, expr value, java.util.List<comprehension> generators) {
+ super(token);
+ this.key = key;
+ addChild(key);
+ this.value = value;
+ addChild(value);
+ this.generators = generators;
+ if (generators == null) {
+ this.generators = new ArrayList<comprehension>();
+ }
+ for(PythonTree t : this.generators) {
+ addChild(t);
+ }
+ }
+
+ public DictComp(Integer ttype, Token token, expr key, expr value, java.util.List<comprehension>
+ generators) {
+ super(ttype, token);
+ this.key = key;
+ addChild(key);
+ this.value = value;
+ addChild(value);
+ this.generators = generators;
+ if (generators == null) {
+ this.generators = new ArrayList<comprehension>();
+ }
+ for(PythonTree t : this.generators) {
+ addChild(t);
+ }
+ }
+
+ public DictComp(PythonTree tree, expr key, expr value, java.util.List<comprehension>
+ generators) {
+ super(tree);
+ this.key = key;
+ addChild(key);
+ this.value = value;
+ addChild(value);
+ this.generators = generators;
+ if (generators == null) {
+ this.generators = new ArrayList<comprehension>();
+ }
+ for(PythonTree t : this.generators) {
+ addChild(t);
+ }
+ }
+
+ @ExposedGet(name = "repr")
+ public String toString() {
+ return "DictComp";
+ }
+
+ public String toStringTree() {
+ StringBuffer sb = new StringBuffer("DictComp(");
+ sb.append("key=");
+ sb.append(dumpThis(key));
+ sb.append(",");
+ sb.append("value=");
+ sb.append(dumpThis(value));
+ sb.append(",");
+ sb.append("generators=");
+ sb.append(dumpThis(generators));
+ sb.append(",");
+ sb.append(")");
+ return sb.toString();
+ }
+
+ public <R> R accept(VisitorIF<R> visitor) throws Exception {
+ return visitor.visitDictComp(this);
+ }
+
+ public void traverse(VisitorIF<?> visitor) throws Exception {
+ if (key != null)
+ key.accept(visitor);
+ if (value != null)
+ value.accept(visitor);
+ if (generators != null) {
+ for (PythonTree t : generators) {
+ if (t != null)
+ t.accept(visitor);
+ }
+ }
+ }
+
+ private int lineno = -1;
+ @ExposedGet(name = "lineno")
+ public int getLineno() {
+ if (lineno != -1) {
+ return lineno;
+ }
+ return getLine();
+ }
+
+ @ExposedSet(name = "lineno")
+ public void setLineno(int num) {
+ lineno = num;
+ }
+
+ private int col_offset = -1;
+ @ExposedGet(name = "col_offset")
+ public int getCol_offset() {
+ if (col_offset != -1) {
+ return col_offset;
+ }
+ return getCharPositionInLine();
+ }
+
+ @ExposedSet(name = "col_offset")
+ public void setCol_offset(int num) {
+ col_offset = num;
+ }
+
+}
diff --git a/src/org/python/antlr/ast/Set.java b/src/org/python/antlr/ast/Set.java
new file mode 100644
--- /dev/null
+++ b/src/org/python/antlr/ast/Set.java
@@ -0,0 +1,171 @@
+// Autogenerated AST node
+package org.python.antlr.ast;
+import org.antlr.runtime.CommonToken;
+import org.antlr.runtime.Token;
+import org.python.antlr.AST;
+import org.python.antlr.PythonTree;
+import org.python.antlr.adapter.AstAdapters;
+import org.python.antlr.base.excepthandler;
+import org.python.antlr.base.expr;
+import org.python.antlr.base.mod;
+import org.python.antlr.base.slice;
+import org.python.antlr.base.stmt;
+import org.python.core.ArgParser;
+import org.python.core.AstList;
+import org.python.core.Py;
+import org.python.core.PyObject;
+import org.python.core.PyString;
+import org.python.core.PyType;
+import org.python.expose.ExposedGet;
+import org.python.expose.ExposedMethod;
+import org.python.expose.ExposedNew;
+import org.python.expose.ExposedSet;
+import org.python.expose.ExposedType;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+ at ExposedType(name = "_ast.Set", base = AST.class)
+public class Set extends expr {
+public static final PyType TYPE = PyType.fromClass(Set.class);
+ private java.util.List<expr> elts;
+ public java.util.List<expr> getInternalElts() {
+ return elts;
+ }
+ @ExposedGet(name = "elts")
+ public PyObject getElts() {
+ return new AstList(elts, AstAdapters.exprAdapter);
+ }
+ @ExposedSet(name = "elts")
+ public void setElts(PyObject elts) {
+ this.elts = AstAdapters.py2exprList(elts);
+ }
+
+
+ private final static PyString[] fields =
+ new PyString[] {new PyString("elts")};
+ @ExposedGet(name = "_fields")
+ public PyString[] get_fields() { return fields; }
+
+ private final static PyString[] attributes =
+ new PyString[] {new PyString("lineno"), new PyString("col_offset")};
+ @ExposedGet(name = "_attributes")
+ public PyString[] get_attributes() { return attributes; }
+
+ public Set(PyType subType) {
+ super(subType);
+ }
+ public Set() {
+ this(TYPE);
+ }
+ @ExposedNew
+ @ExposedMethod
+ public void Set___init__(PyObject[] args, String[] keywords) {
+ ArgParser ap = new ArgParser("Set", args, keywords, new String[]
+ {"elts", "lineno", "col_offset"}, 1, true);
+ setElts(ap.getPyObject(0, Py.None));
+ int lin = ap.getInt(1, -1);
+ if (lin != -1) {
+ setLineno(lin);
+ }
+
+ int col = ap.getInt(2, -1);
+ if (col != -1) {
+ setLineno(col);
+ }
+
+ }
+
+ public Set(PyObject elts) {
+ setElts(elts);
+ }
+
+ public Set(Token token, java.util.List<expr> elts) {
+ super(token);
+ this.elts = elts;
+ if (elts == null) {
+ this.elts = new ArrayList<expr>();
+ }
+ for(PythonTree t : this.elts) {
+ addChild(t);
+ }
+ }
+
+ public Set(Integer ttype, Token token, java.util.List<expr> elts) {
+ super(ttype, token);
+ this.elts = elts;
+ if (elts == null) {
+ this.elts = new ArrayList<expr>();
+ }
+ for(PythonTree t : this.elts) {
+ addChild(t);
+ }
+ }
+
+ public Set(PythonTree tree, java.util.List<expr> elts) {
+ super(tree);
+ this.elts = elts;
+ if (elts == null) {
+ this.elts = new ArrayList<expr>();
+ }
+ for(PythonTree t : this.elts) {
+ addChild(t);
+ }
+ }
+
+ @ExposedGet(name = "repr")
+ public String toString() {
+ return "Set";
+ }
+
+ public String toStringTree() {
+ StringBuffer sb = new StringBuffer("Set(");
+ sb.append("elts=");
+ sb.append(dumpThis(elts));
+ sb.append(",");
+ sb.append(")");
+ return sb.toString();
+ }
+
+ public <R> R accept(VisitorIF<R> visitor) throws Exception {
+ return visitor.visitSet(this);
+ }
+
+ public void traverse(VisitorIF<?> visitor) throws Exception {
+ if (elts != null) {
+ for (PythonTree t : elts) {
+ if (t != null)
+ t.accept(visitor);
+ }
+ }
+ }
+
+ private int lineno = -1;
+ @ExposedGet(name = "lineno")
+ public int getLineno() {
+ if (lineno != -1) {
+ return lineno;
+ }
+ return getLine();
+ }
+
+ @ExposedSet(name = "lineno")
+ public void setLineno(int num) {
+ lineno = num;
+ }
+
+ private int col_offset = -1;
+ @ExposedGet(name = "col_offset")
+ public int getCol_offset() {
+ if (col_offset != -1) {
+ return col_offset;
+ }
+ return getCharPositionInLine();
+ }
+
+ @ExposedSet(name = "col_offset")
+ public void setCol_offset(int num) {
+ col_offset = num;
+ }
+
+}
diff --git a/src/org/python/antlr/ast/SetComp.java b/src/org/python/antlr/ast/SetComp.java
new file mode 100644
--- /dev/null
+++ b/src/org/python/antlr/ast/SetComp.java
@@ -0,0 +1,197 @@
+// Autogenerated AST node
+package org.python.antlr.ast;
+import org.antlr.runtime.CommonToken;
+import org.antlr.runtime.Token;
+import org.python.antlr.AST;
+import org.python.antlr.PythonTree;
+import org.python.antlr.adapter.AstAdapters;
+import org.python.antlr.base.excepthandler;
+import org.python.antlr.base.expr;
+import org.python.antlr.base.mod;
+import org.python.antlr.base.slice;
+import org.python.antlr.base.stmt;
+import org.python.core.ArgParser;
+import org.python.core.AstList;
+import org.python.core.Py;
+import org.python.core.PyObject;
+import org.python.core.PyString;
+import org.python.core.PyType;
+import org.python.expose.ExposedGet;
+import org.python.expose.ExposedMethod;
+import org.python.expose.ExposedNew;
+import org.python.expose.ExposedSet;
+import org.python.expose.ExposedType;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+ at ExposedType(name = "_ast.SetComp", base = AST.class)
+public class SetComp extends expr {
+public static final PyType TYPE = PyType.fromClass(SetComp.class);
+ private expr elt;
+ public expr getInternalElt() {
+ return elt;
+ }
+ @ExposedGet(name = "elt")
+ public PyObject getElt() {
+ return elt;
+ }
+ @ExposedSet(name = "elt")
+ public void setElt(PyObject elt) {
+ this.elt = AstAdapters.py2expr(elt);
+ }
+
+ private java.util.List<comprehension> generators;
+ public java.util.List<comprehension> getInternalGenerators() {
+ return generators;
+ }
+ @ExposedGet(name = "generators")
+ public PyObject getGenerators() {
+ return new AstList(generators, AstAdapters.comprehensionAdapter);
+ }
+ @ExposedSet(name = "generators")
+ public void setGenerators(PyObject generators) {
+ this.generators = AstAdapters.py2comprehensionList(generators);
+ }
+
+
+ private final static PyString[] fields =
+ new PyString[] {new PyString("elt"), new PyString("generators")};
+ @ExposedGet(name = "_fields")
+ public PyString[] get_fields() { return fields; }
+
+ private final static PyString[] attributes =
+ new PyString[] {new PyString("lineno"), new PyString("col_offset")};
+ @ExposedGet(name = "_attributes")
+ public PyString[] get_attributes() { return attributes; }
+
+ public SetComp(PyType subType) {
+ super(subType);
+ }
+ public SetComp() {
+ this(TYPE);
+ }
+ @ExposedNew
+ @ExposedMethod
+ public void SetComp___init__(PyObject[] args, String[] keywords) {
+ ArgParser ap = new ArgParser("SetComp", args, keywords, new String[]
+ {"elt", "generators", "lineno", "col_offset"}, 2, true);
+ setElt(ap.getPyObject(0, Py.None));
+ setGenerators(ap.getPyObject(1, Py.None));
+ int lin = ap.getInt(2, -1);
+ if (lin != -1) {
+ setLineno(lin);
+ }
+
+ int col = ap.getInt(3, -1);
+ if (col != -1) {
+ setLineno(col);
+ }
+
+ }
+
+ public SetComp(PyObject elt, PyObject generators) {
+ setElt(elt);
+ setGenerators(generators);
+ }
+
+ public SetComp(Token token, expr elt, java.util.List<comprehension> generators) {
+ super(token);
+ this.elt = elt;
+ addChild(elt);
+ this.generators = generators;
+ if (generators == null) {
+ this.generators = new ArrayList<comprehension>();
+ }
+ for(PythonTree t : this.generators) {
+ addChild(t);
+ }
+ }
+
+ public SetComp(Integer ttype, Token token, expr elt, java.util.List<comprehension> generators) {
+ super(ttype, token);
+ this.elt = elt;
+ addChild(elt);
+ this.generators = generators;
+ if (generators == null) {
+ this.generators = new ArrayList<comprehension>();
+ }
+ for(PythonTree t : this.generators) {
+ addChild(t);
+ }
+ }
+
+ public SetComp(PythonTree tree, expr elt, java.util.List<comprehension> generators) {
+ super(tree);
+ this.elt = elt;
+ addChild(elt);
+ this.generators = generators;
+ if (generators == null) {
+ this.generators = new ArrayList<comprehension>();
+ }
+ for(PythonTree t : this.generators) {
+ addChild(t);
+ }
+ }
+
+ @ExposedGet(name = "repr")
+ public String toString() {
+ return "SetComp";
+ }
+
+ public String toStringTree() {
+ StringBuffer sb = new StringBuffer("SetComp(");
+ sb.append("elt=");
+ sb.append(dumpThis(elt));
+ sb.append(",");
+ sb.append("generators=");
+ sb.append(dumpThis(generators));
+ sb.append(",");
+ sb.append(")");
+ return sb.toString();
+ }
+
+ public <R> R accept(VisitorIF<R> visitor) throws Exception {
+ return visitor.visitSetComp(this);
+ }
+
+ public void traverse(VisitorIF<?> visitor) throws Exception {
+ if (elt != null)
+ elt.accept(visitor);
+ if (generators != null) {
+ for (PythonTree t : generators) {
+ if (t != null)
+ t.accept(visitor);
+ }
+ }
+ }
+
+ private int lineno = -1;
+ @ExposedGet(name = "lineno")
+ public int getLineno() {
+ if (lineno != -1) {
+ return lineno;
+ }
+ return getLine();
+ }
+
+ @ExposedSet(name = "lineno")
+ public void setLineno(int num) {
+ lineno = num;
+ }
+
+ private int col_offset = -1;
+ @ExposedGet(name = "col_offset")
+ public int getCol_offset() {
+ if (col_offset != -1) {
+ return col_offset;
+ }
+ return getCharPositionInLine();
+ }
+
+ @ExposedSet(name = "col_offset")
+ public void setCol_offset(int num) {
+ col_offset = num;
+ }
+
+}
diff --git a/src/org/python/antlr/ast/VisitorBase.java b/src/org/python/antlr/ast/VisitorBase.java
--- a/src/org/python/antlr/ast/VisitorBase.java
+++ b/src/org/python/antlr/ast/VisitorBase.java
@@ -221,12 +221,30 @@
return ret;
}
+ public R visitSet(Set node) throws Exception {
+ R ret = unhandled_node(node);
+ traverse(node);
+ return ret;
+ }
+
public R visitListComp(ListComp node) throws Exception {
R ret = unhandled_node(node);
traverse(node);
return ret;
}
+ public R visitSetComp(SetComp node) throws Exception {
+ R ret = unhandled_node(node);
+ traverse(node);
+ return ret;
+ }
+
+ public R visitDictComp(DictComp node) throws Exception {
+ R ret = unhandled_node(node);
+ traverse(node);
+ return ret;
+ }
+
public R visitGeneratorExp(GeneratorExp node) throws Exception {
R ret = unhandled_node(node);
traverse(node);
diff --git a/src/org/python/antlr/ast/VisitorIF.java b/src/org/python/antlr/ast/VisitorIF.java
--- a/src/org/python/antlr/ast/VisitorIF.java
+++ b/src/org/python/antlr/ast/VisitorIF.java
@@ -35,7 +35,10 @@
public R visitLambda(Lambda node) throws Exception;
public R visitIfExp(IfExp node) throws Exception;
public R visitDict(Dict node) throws Exception;
+ public R visitSet(Set node) throws Exception;
public R visitListComp(ListComp node) throws Exception;
+ public R visitSetComp(SetComp node) throws Exception;
+ public R visitDictComp(DictComp node) throws Exception;
public R visitGeneratorExp(GeneratorExp node) throws Exception;
public R visitYield(Yield node) throws Exception;
public R visitCompare(Compare node) throws Exception;
diff --git a/src/org/python/compiler/CodeCompiler.java b/src/org/python/compiler/CodeCompiler.java
--- a/src/org/python/compiler/CodeCompiler.java
+++ b/src/org/python/compiler/CodeCompiler.java
@@ -52,6 +52,7 @@
import org.python.antlr.ast.Raise;
import org.python.antlr.ast.Repr;
import org.python.antlr.ast.Return;
+import org.python.antlr.ast.Set;
import org.python.antlr.ast.Slice;
import org.python.antlr.ast.Str;
import org.python.antlr.ast.Subscript;
@@ -88,6 +89,7 @@
import org.python.core.PyList;
import org.python.core.PyLong;
import org.python.core.PyObject;
+import org.python.core.PySet;
import org.python.core.PySlice;
import org.python.core.PyString;
import org.python.core.PyTuple;
@@ -2180,6 +2182,19 @@
}
@Override
+ public Object visitSet(Set node) throws Exception {
+ int content = makeArray(node.getInternalElts());
+
+ code.new_(p(PySet.class));
+ code.dup();
+ code.aload(content);
+ code.invokespecial(p(PySet.class), "<init>", sig(Void.TYPE, PyObject[].class));
+ freeArray(content);
+ return null;
+ }
+
+
+ @Override
public Object visitRepr(Repr node) throws Exception {
visit(node.getInternalValue());
code.invokevirtual(p(PyObject.class), "__repr__", sig(PyString.class));
diff --git a/src/org/python/core/BaseSet.java b/src/org/python/core/BaseSet.java
--- a/src/org/python/core/BaseSet.java
+++ b/src/org/python/core/BaseSet.java
@@ -42,6 +42,19 @@
}
/**
+ * Update the underlying set with the contents of the iterable.
+ */
+ protected static Set<PyObject> _update(Set<PyObject> set, PyObject[] data) {
+ if (data == null) {
+ return set;
+ }
+ for (PyObject item : data) {
+ set.add(item);
+ }
+ return set;
+ }
+
+ /**
* The union of <code>this</code> with <code>other</code>. <p/> <br/> (I.e. all elements
* that are in either set)
*
diff --git a/src/org/python/core/PySet.java b/src/org/python/core/PySet.java
--- a/src/org/python/core/PySet.java
+++ b/src/org/python/core/PySet.java
@@ -26,6 +26,10 @@
super(TYPE, _update(Generic.<PyObject>concurrentSet(), data));
}
+ public PySet(PyObject[] data) {
+ super(TYPE, _update(Generic.<PyObject>concurrentSet(), data));
+ }
+
@ExposedNew
@ExposedMethod(doc = BuiltinDocs.set___init___doc)
final void set___init__(PyObject[] args, String[] kwds) {
--
Repository URL: http://hg.python.org/jython
More information about the Jython-checkins
mailing list