-
-
Notifications
You must be signed in to change notification settings - Fork 402
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
682 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
package p | ||
|
||
import ( | ||
. "github.com/alecthomas/chroma" // nolint | ||
"github.com/alecthomas/chroma/lexers/internal" | ||
) | ||
|
||
// Pony lexer. | ||
var Pony = internal.Register(MustNewLexer( | ||
&Config{ | ||
Name: "Pony", | ||
Aliases: []string{"pony"}, | ||
Filenames: []string{"*.pony"}, | ||
MimeTypes: []string{}, | ||
}, | ||
Rules{ | ||
"root": { | ||
{`\n`, Text, nil}, | ||
{`[^\S\n]+`, Text, nil}, | ||
{`//.*\n`, CommentSingle, nil}, | ||
{`/\*`, CommentMultiline, Push("nested_comment")}, | ||
{`"""(?:.|\n)*?"""`, LiteralStringDoc, nil}, | ||
{`"`, LiteralString, Push("string")}, | ||
{`\'.*\'`, LiteralStringChar, nil}, | ||
{`=>|[]{}:().~;,|&!^?[]`, Punctuation, nil}, | ||
{Words(``, `\b`, `addressof`, `and`, `as`, `consume`, `digestof`, `is`, `isnt`, `not`, `or`), OperatorWord, nil}, | ||
{`!=|==|<<|>>|[-+/*%=<>]`, Operator, nil}, | ||
{Words(``, `\b`, `box`, `break`, `compile_error`, `compile_intrinsic`, `continue`, `do`, `else`, `elseif`, `embed`, `end`, `error`, `for`, `if`, `ifdef`, `in`, `iso`, `lambda`, `let`, `match`, `object`, `recover`, `ref`, `repeat`, `return`, `tag`, `then`, `this`, `trn`, `try`, `until`, `use`, `var`, `val`, `where`, `while`, `with`, `#any`, `#read`, `#send`, `#share`), Keyword, nil}, | ||
{`(actor|class|struct|primitive|interface|trait|type)((?:\s)+)`, ByGroups(Keyword, Text), Push("typename")}, | ||
{`(new|fun|be)((?:\s)+)`, ByGroups(Keyword, Text), Push("methodname")}, | ||
{Words(``, `\b`, `U8`, `U16`, `U32`, `U64`, `ULong`, `USize`, `U128`, `Unsigned`, `Stringable`, `String`, `StringBytes`, `StringRunes`, `InputNotify`, `InputStream`, `Stdin`, `ByteSeq`, `ByteSeqIter`, `OutStream`, `StdStream`, `SourceLoc`, `I8`, `I16`, `I32`, `I64`, `ILong`, `ISize`, `I128`, `Signed`, `Seq`, `RuntimeOptions`, `Real`, `Integer`, `SignedInteger`, `UnsignedInteger`, `FloatingPoint`, `Number`, `Int`, `ReadSeq`, `ReadElement`, `Pointer`, `Platform`, `NullablePointer`, `None`, `Iterator`, `F32`, `F64`, `Float`, `Env`, `DoNotOptimise`, `DisposableActor`, `Less`, `Equal`, `Greater`, `Compare`, `HasEq`, `Equatable`, `Comparable`, `Bool`, `AsioEventID`, `AsioEventNotify`, `AsioEvent`, `Array`, `ArrayKeys`, `ArrayValues`, `ArrayPairs`, `Any`, `AmbientAuth`), KeywordType, nil}, | ||
{`_?[A-Z]\w*`, NameClass, nil}, | ||
{`string\(\)`, NameOther, nil}, | ||
{`(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+`, LiteralNumberFloat, nil}, | ||
{`0x[0-9a-fA-F]+`, LiteralNumberHex, nil}, | ||
{`\d+`, LiteralNumberInteger, nil}, | ||
{`(true|false)\b`, Keyword, nil}, | ||
{`_\d*`, Name, nil}, | ||
{`_?[a-z][\w\'_]*`, Name, nil}, | ||
}, | ||
"typename": { | ||
{`(iso|trn|ref|val|box|tag)?((?:\s)*)(_?[A-Z]\w*)`, ByGroups(Keyword, Text, NameClass), Pop(1)}, | ||
}, | ||
"methodname": { | ||
{`(iso|trn|ref|val|box|tag)?((?:\s)*)(_?[a-z]\w*)`, ByGroups(Keyword, Text, NameFunction), Pop(1)}, | ||
}, | ||
"nested_comment": { | ||
{`[^*/]+`, CommentMultiline, nil}, | ||
{`/\*`, CommentMultiline, Push()}, | ||
{`\*/`, CommentMultiline, Pop(1)}, | ||
{`[*/]`, CommentMultiline, nil}, | ||
}, | ||
"string": { | ||
{`"`, LiteralString, Pop(1)}, | ||
{`\\"`, LiteralString, nil}, | ||
{`[^\\"]+`, LiteralString, nil}, | ||
}, | ||
}, | ||
)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
use "net" | ||
use "files" | ||
|
||
class ClientSide is TCPConnectionNotify | ||
let _env: Env | ||
|
||
new iso create(env: Env) => | ||
_env = env | ||
|
||
fun ref connecting(conn: TCPConnection ref, count: U32) => | ||
_env.out.print("connecting: " + count.string()) | ||
|
||
fun ref connected(conn: TCPConnection ref) => | ||
try | ||
(let host, let service) = conn.remote_address().name()? | ||
_env.out.print("connected to " + host + ":" + service) | ||
conn.set_nodelay(true) | ||
conn.set_keepalive(10) | ||
conn.write("client says hi") | ||
end | ||
|
||
class Listener is TCPListenNotify | ||
let _env: Env | ||
let _limit: USize | ||
var _host: String = "" | ||
var _count: USize = 0 | ||
|
||
new create(env: Env, limit: USize) => | ||
_env = env | ||
_limit = limit | ||
|
||
fun ref connected(listen: TCPListener ref): TCPConnectionNotify iso^ => | ||
let env = _env | ||
|
||
_env.out.print("Server starting") | ||
|
||
let server = ServerSide(env) | ||
|
||
_spawn(listen) | ||
server | ||
|
||
fun ref _spawn(listen: TCPListener ref) => | ||
if (_limit > 0) and (_count >= _limit) then | ||
listen.dispose() | ||
return | ||
end | ||
|
||
_count = _count + 1 | ||
_env.out.print("spawn " + _count.string()) | ||
|
||
try | ||
let env = _env | ||
|
||
_env.out.print("Client starting") | ||
TCPConnection( | ||
_env.root as AmbientAuth, | ||
ClientSide(env), | ||
_host, | ||
_service) | ||
else | ||
_env.out.print("couldn't create client side") | ||
listen.close() | ||
end | ||
|
||
actor Main | ||
new create(env: Env) => | ||
let limit = try | ||
env.args(1)?.usize()? | ||
else | ||
1 | ||
end | ||
|
||
try | ||
let auth = env.root as AmbientAuth | ||
TCPListener(auth, recover Listener(env, limit) end) | ||
UDPSocket(auth, recover Pong(env) end) | ||
else | ||
env.out.print("unable to use the network") | ||
end | ||
be test() => | ||
nonsensical.stuff.here() | ||
|
Oops, something went wrong.