Skip to content

Commit b32b9a1

Browse files
committed
[GR-13425] _socket builtin: add missing default args specializations
PullRequest: graalpython/367
2 parents 7f6ba08 + ae1f721 commit b32b9a1

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/SocketModuleBuiltins.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -49,6 +49,7 @@
4949
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
5050
import com.oracle.graal.python.builtins.PythonBuiltins;
5151
import com.oracle.graal.python.builtins.objects.PNone;
52+
import com.oracle.graal.python.builtins.objects.socket.PSocket;
5253
import com.oracle.graal.python.builtins.objects.type.PythonClass;
5354
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5455
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
@@ -69,8 +70,28 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
6970
@Builtin(name = "socket", minNumOfPositionalArgs = 1, maxNumOfPositionalArgs = 5, keywordArguments = {"family", "type", "proto", "fileno"}, constructsClass = PythonBuiltinClassType.PSocket)
7071
@GenerateNodeFactory
7172
public abstract static class SocketNode extends PythonBuiltinNode {
72-
@Specialization
73+
@Specialization(guards = {"isNoValue(family)", "isNoValue(type)", "isNoValue(proto)", "isNoValue(fileno)"})
74+
Object socket(PythonClass cls, @SuppressWarnings("unused") PNone family, @SuppressWarnings("unused") PNone type, @SuppressWarnings("unused") PNone proto,
75+
@SuppressWarnings("unused") PNone fileno) {
76+
return createSocketInternal(cls, PSocket.AF_INET, PSocket.SOCK_STREAM, 0);
77+
}
78+
79+
@Specialization(guards = {"isNoValue(type)", "isNoValue(proto)", "isNoValue(fileno)"})
80+
Object socket(PythonClass cls, int family, @SuppressWarnings("unused") PNone type, @SuppressWarnings("unused") PNone proto, @SuppressWarnings("unused") PNone fileno) {
81+
return createSocketInternal(cls, family, PSocket.SOCK_STREAM, 0);
82+
}
83+
84+
@Specialization(guards = {"isNoValue(proto)", "isNoValue(fileno)"})
85+
Object socket(PythonClass cls, int family, int type, @SuppressWarnings("unused") PNone proto, @SuppressWarnings("unused") PNone fileno) {
86+
return createSocketInternal(cls, family, type, 0);
87+
}
88+
89+
@Specialization(guards = {"isNoValue(fileno)"})
7390
Object socket(PythonClass cls, int family, int type, int proto, @SuppressWarnings("unused") PNone fileno) {
91+
return createSocketInternal(cls, family, type, proto);
92+
}
93+
94+
private Object createSocketInternal(PythonClass cls, int family, int type, int proto) {
7495
if (getContext().getEnv().isNativeAccessAllowed()) {
7596
return factory().createSocket(cls, family, type, proto);
7697
} else {

graalpython/lib-graalpython/_socket.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,20 @@
5151
error = OSError
5252
__default_timeout = None
5353

54+
5455
def getdefaulttimeout():
5556
return __default_timeout
5657

58+
5759
def setdefaulttimeout(timeout):
5860
global __default_timeout
5961
__default_timeout = timeout
6062

63+
64+
try:
65+
_sock = socket()
66+
SocketType = type(_sock)
67+
del _sock
68+
except:
69+
pass
70+

0 commit comments

Comments
 (0)