diff --git a/autotests/folding/highlight.pony.fold b/autotests/folding/highlight.pony.fold new file mode 100644 --- /dev/null +++ b/autotests/folding/highlight.pony.fold @@ -0,0 +1,184 @@ +primitive Red fun apply(): U32 => 0xFFFF0000 + +primitive Colours + fun black(): U32 => 0xFF000000 + fun red(): U32 => 0xFFFF0000 + +primitive Black +primitive Blue + +type Colour is (Black | Blue ) + +primitive ColourList + fun tag apply(): Array[Colour] => + [Black; Blue] + +for colour in ColourList().values() do +end + +type EGLEvent is (U8, F32, F32) +(var code, var x, var y) = @getEvent[EGLEvent]() + +primitive _XDisplayHandle +primitive _EGLDisplayHandle + +let x_dpy = @XOpenDisplay[Pointer[_XDisplayHandle]](U32(0)) +if x_dpy.is_null() then + env.out.print("XOpenDisplay failed") +end + +let e_dpy = @eglGetDisplay[Pointer[_EGLDisplayHandle]](x_dpy) +if e_dpy.is_null() then + env.out.print("eglGetDisplay failed") +end + +primitive _EGLConfigHandle +let a = Array[U16](8) +a.push(0x3040) +a.push(0b01011) +let config = Pointer[_EGLConfigHandle] +if @eglChooseConfig[U32](e_dpy, a, config, U32(1), Pointer[U32]) == 0 then + env.out.print("eglChooseConfig failed") +end + + +actor Main + new create(env: Env) => + // The no of arguments + env.out.print(env.args.size().string()) + for value in env.args.values() do + env.out.print(value) + end + // Access the arguments the first one will always be the the appication name + try env.out.print(env.args(0)?) end + +actor Main + new create(env: Env) => + var options = Options(env) + + options + .add("output", "o", StringArgument) + + env.out.print(options.has_argument()) + + for option in options do + match option + | ("output", var arg: String) => _outputFileName = arg.string() + | let err: ParseError => + err.report(env.out) + env.out.print( + """ + pony-embed [OPTIONS] + --output name string output filename. + """ + ) + end + end + +use "ponytest" + +actor Main is TestList + new create(env: Env) => PonyTest(env, this) + new make() => None + + fun tag tests(test: PonyTest) => + test(_TestAddition) + +class iso _TestAddition is UnitTest + """ + Adding 2 numbers + """ + fun name(): String => "u32/add" + + fun apply(h: TestHelper): TestResult => + h.expect_eq[U32](2 + 2, 4) + +fun tag log(msg: String, verbose: Bool = false) +be fail() => +be assert_failed(msg: String) => +fun tag assert_true(actual: Bool, msg: String = "") ? +fun tag expect_true(actual: Bool, msg: String = ""): Bool +fun tag expect_eq[A: (Equatable[A] #read & Stringable)] + (expect: A, actual: A, msg: String = ""): Bool + +fun add(other: A): A +fun sub(other: A): A +fun mul(other: A): A +fun div(other: A): A +fun mod(other: A): A +fun eq(other: A): Bool +fun ne(other: A): Bool +fun lt(other: A): Bool +fun le(other: A): Bool +fun ge(other: A): Bool +fun gt(other: A): Bool +fun shl(other: A): A +fun shr(other: A): A +fun op_and(other:A): A +fun op_or(other: A): A +fun op_xor(othr: A): A + +class Test + fun alpha() => + """ + """ + +let dice: Array[U32] = [1; 2; 3 + 4 + 5 + 6 +] + +actor Main + fun foo(n:U32): {ref(U32): U32} => + var s: Array[U32] = Array[U32].init(n, 1) + {ref(i:U32)(s): U32 => + try + s(0) = s(0) + i + s(0) + elseelse + 0 + end + } + + new create(env:Env) => + var f = foo(5) + env.out.print(f(10).string()) + env.out.print(f(20).string()) + + +'\uaaaa' +'\Ubbbbbb' +'\xcc' +"\uaaaaa" +"\Ubbbbbbb" +"\xccc" +34.4 +34.4e43 +43e4 +0x3040 +0xaF +0b01 + +a.endnormal + +/* syntactically false: */ + +0b2332 +0b +0x +0xgf +0f00 +3. +.3 +3.e3 +'' +'\u' +'\ua' +'\uaaa' +'\uaaaaa' +'\uyyyy' +"\u" +"\ua" +"\uaaa" +"\uyyyy" diff --git a/autotests/foldingtest.pony b/autotests/foldingtest.pony new file mode 100644 --- /dev/null +++ b/autotests/foldingtest.pony @@ -0,0 +1,190 @@ +/* + Copyright (C) 2016 Volker Krause + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "test-config.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +using namespace KSyntaxHighlighting; + +class FoldingHighlighter : public AbstractHighlighter +{ +public: + void highlightFile(const QString &inFileName, const QString &outFileName) + { + QFile outFile(outFileName); + if (!outFile.open(QFile::WriteOnly | QFile::Truncate)) { + qWarning() << "Failed to open output file" << outFileName << ":" << outFile.errorString(); + return; + } + m_out.setDevice(&outFile); + m_out.setCodec("UTF-8"); + + QFile f(inFileName); + if (!f.open(QFile::ReadOnly)) { + qWarning() << "Failed to open input file" << inFileName << ":" << f.errorString(); + return; + } + + QTextStream in(&f); + in.setCodec("UTF-8"); + State state; + bool indentationFoldEnabled = definition().indentationBasedFoldingEnabled(); + if (indentationFoldEnabled) + m_out << ""; + while (!in.atEnd()) { + const auto currentLine = in.readLine(); + state = highlightLine(currentLine, state); + + if (indentationFoldEnabled != state.indentationBasedFoldingEnabled()) { + indentationFoldEnabled = state.indentationBasedFoldingEnabled(); + if (indentationFoldEnabled) + m_out << ""; + else + m_out << ""; + } + + int offset = 0; + foreach (const auto &fold, m_folds) { + m_out << currentLine.mid(offset, fold.offset - offset); + if (fold.region.type() == FoldingRegion::Begin) + m_out << ""; + else + m_out << ""; + m_out << currentLine.mid(fold.offset, fold.length); + if (fold.region.type() == FoldingRegion::Begin) + m_out << ""; + else + m_out << ""; + offset = fold.offset + fold.length; + } + m_out << currentLine.mid(offset) << '\n'; + m_folds.clear(); + } + + m_out.flush(); + } + +protected: + void applyFormat(int offset, int length, const Format &format) Q_DECL_OVERRIDE + { + Q_UNUSED(offset); + Q_UNUSED(length); + Q_UNUSED(format); + } + + void applyFolding(int offset, int length, FoldingRegion region) Q_DECL_OVERRIDE + { + Q_ASSERT(region.isValid()); + m_folds.push_back({offset, length, region}); + } + +private: + QTextStream m_out; + struct Fold { int offset; int length; FoldingRegion region; }; + QVector m_folds; +}; + + +class FoldingTest : public QObject +{ + Q_OBJECT +public: + explicit FoldingTest(QObject *parent = nullptr) : QObject(parent) {} +private: + +private Q_SLOTS: + void initTestCase() + { + QStandardPaths::enableTestMode(true); + } + + void testFolding_data() + { + QTest::addColumn("inFile"); + QTest::addColumn("outFile"); + QTest::addColumn("refFile"); + QTest::addColumn("syntax"); + + QDir dir(QStringLiteral(TESTSRCDIR "/input")); + foreach (const auto &fileName, dir.entryList(QDir::Files | QDir::NoSymLinks | QDir::Readable, QDir::Name)) { + const auto inFile = dir.absoluteFilePath(fileName); + if (inFile.endsWith(QLatin1String(".syntax"))) + continue; + + QString syntax; + QFile syntaxOverride(inFile + QStringLiteral(".syntax")); + if (syntaxOverride.exists() && syntaxOverride.open(QFile::ReadOnly)) + syntax = QString::fromUtf8(syntaxOverride.readAll()).trimmed(); + + QTest::newRow(fileName.toUtf8().constData()) << inFile + << (QStringLiteral(TESTBUILDDIR "/folding.out/") + fileName + QStringLiteral(".fold")) + << (QStringLiteral(TESTSRCDIR "/folding/") + fileName + QStringLiteral(".fold")) + << syntax; + } + + QDir().mkpath(QStringLiteral(TESTBUILDDIR "/folding.out/")); + } + + void testFolding() + { + QFETCH(QString, inFile); + QFETCH(QString, outFile); + QFETCH(QString, refFile); + QFETCH(QString, syntax); + + Repository m_repo; + + auto def = m_repo.definitionForFileName(inFile); + if (!syntax.isEmpty()) + def = m_repo.definitionForName(syntax); + + FoldingHighlighter highlighter; + + QVERIFY(def.isValid()); + highlighter.setDefinition(def); + highlighter.highlightFile(inFile, outFile); + + const auto diffExecutable = QStandardPaths::findExecutable(QStringLiteral("diff")); + if (!diffExecutable.isEmpty()) { + QProcess proc; + proc.setProcessChannelMode(QProcess::ForwardedChannels); + proc.start(diffExecutable, {QStringLiteral("-u"), refFile, outFile}); + QVERIFY(proc.waitForFinished()); + QCOMPARE(proc.exitCode(), 0); + } else { + qDebug() << "Skipping part of the test since the 'diff' executable is not in PATH"; + } + } + +}; + +QTEST_GUILESS_MAIN(FoldingTest) + +#include "foldingtest.moc" diff --git a/autotests/html/highlight.pony.html b/autotests/html/highlight.pony.html new file mode 100644 --- /dev/null +++ b/autotests/html/highlight.pony.html @@ -0,0 +1,191 @@ + + + +highlight.pony + +
+primitive Red   fun apply(): U32 => 0xFFFF0000
+
+primitive Colours
+  fun black(): U32 => 0xFF000000
+  fun red(): U32 => 0xFFFF0000
+
+primitive Black
+primitive Blue
+
+type Colour is (Black | Blue )
+
+primitive ColourList
+  fun tag apply(): Array[Colour] =>
+    [Black; Blue]
+
+for colour in ColourList().values() do
+end
+
+type EGLEvent is (U8, F32, F32)
+(var code, var x, var y) = @getEvent[EGLEvent]()
+
+primitive _XDisplayHandle
+primitive _EGLDisplayHandle
+
+let x_dpy = @XOpenDisplay[Pointer[_XDisplayHandle]](U32(0))
+if x_dpy.is_null() then
+  env.out.print("XOpenDisplay failed")
+end
+
+let e_dpy = @eglGetDisplay[Pointer[_EGLDisplayHandle]](x_dpy)
+if e_dpy.is_null() then
+  env.out.print("eglGetDisplay failed")
+end
+
+primitive _EGLConfigHandle
+let a = Array[U16](8)
+a.push(0x3040)
+a.push(0b01011)
+let config = Pointer[_EGLConfigHandle]
+if @eglChooseConfig[U32](e_dpy, a, config, U32(1), Pointer[U32]) == 0 then
+    env.out.print("eglChooseConfig failed")
+end
+
+
+actor Main
+  new create(env: Env) =>
+    // The no of arguments
+    env.out.print(env.args.size().string())
+    for value in env.args.values() do
+      env.out.print(value)
+    end
+    // Access the arguments the first one will always be the the appication name
+    try env.out.print(env.args(0)?) end
+
+actor Main
+  new create(env: Env) =>
+    var options = Options(env)
+
+    options
+      .add("output", "o", StringArgument)
+
+    env.out.print(options.has_argument())
+
+    for option in options do
+      match option
+      | ("output", var arg: String) => _outputFileName = arg.string()
+      | let err: ParseError =>
+          err.report(env.out)
+          env.out.print(
+            """
+            pony-embed [OPTIONS]
+              --output     name   string output filename.
+            """
+          )
+      end
+    end
+
+use "ponytest"
+
+actor Main is TestList
+  new create(env: Env) => PonyTest(env, this)
+  new make() => None
+
+  fun tag tests(test: PonyTest) =>
+    test(_TestAddition)
+
+class iso _TestAddition is UnitTest
+  """
+  Adding 2 numbers
+  """
+  fun name(): String => "u32/add"
+
+  fun apply(h: TestHelper): TestResult =>
+    h.expect_eq[U32](2 + 2, 4)
+
+fun tag log(msg: String, verbose: Bool = false)
+be fail() =>
+be assert_failed(msg: String) =>
+fun tag assert_true(actual: Bool, msg: String = "") ?
+fun tag expect_true(actual: Bool, msg: String = ""): Bool
+fun tag expect_eq[A: (Equatable[A] #read & Stringable)]
+  (expect: A, actual: A, msg: String = ""): Bool
+
+fun add(other: A): A
+fun sub(other: A): A
+fun mul(other: A): A
+fun div(other: A): A
+fun mod(other: A): A
+fun eq(other: A): Bool
+fun ne(other: A): Bool
+fun lt(other: A): Bool
+fun le(other: A): Bool
+fun ge(other: A): Bool
+fun gt(other: A): Bool
+fun shl(other: A): A
+fun shr(other: A): A
+fun op_and(other:A): A
+fun op_or(other: A): A
+fun op_xor(othr: A): A
+
+class Test
+  fun alpha() =>
+    """
+    """
+
+let dice: Array[U32] = [1; 2; 3
+  4
+  5
+  6
+]
+
+actor Main
+  fun foo(n:U32): {ref(U32): U32} =>
+    var s: Array[U32] = Array[U32].init(n, 1)
+    {ref(i:U32)(s): U32 =>
+      try
+        s(0) = s(0) + i
+        s(0)
+      else
+        0
+      end
+    }
+
+  new create(env:Env) =>
+    var f = foo(5)
+    env.out.print(f(10).string())
+    env.out.print(f(20).string())
+
+
+'\uaaaa'
+'\Ubbbbbb'
+'\xcc'
+"\uaaaaa"
+"\Ubbbbbbb"
+"\xccc"
+34.4
+34.4e43
+43e4
+0x3040
+0xaF
+0b01
+
+a.endnormal
+
+/* syntactically false: */
+
+0b2332
+0b
+0x
+0xgf
+0f00
+3.
+.3
+3.e3
+''
+'\u'
+'\ua'
+'\uaaa'
+'\uaaaaa'
+'\uyyyy'
+"\u"
+"\ua"
+"\uaaa"
+"\uyyyy"
+
diff --git a/autotests/input/highlight.pony b/autotests/input/highlight.pony new file mode 100644 --- /dev/null +++ b/autotests/input/highlight.pony @@ -0,0 +1,184 @@ +primitive Red fun apply(): U32 => 0xFFFF0000 + +primitive Colours + fun black(): U32 => 0xFF000000 + fun red(): U32 => 0xFFFF0000 + +primitive Black +primitive Blue + +type Colour is (Black | Blue ) + +primitive ColourList + fun tag apply(): Array[Colour] => + [Black; Blue] + +for colour in ColourList().values() do +end + +type EGLEvent is (U8, F32, F32) +(var code, var x, var y) = @getEvent[EGLEvent]() + +primitive _XDisplayHandle +primitive _EGLDisplayHandle + +let x_dpy = @XOpenDisplay[Pointer[_XDisplayHandle]](U32(0)) +if x_dpy.is_null() then + env.out.print("XOpenDisplay failed") +end + +let e_dpy = @eglGetDisplay[Pointer[_EGLDisplayHandle]](x_dpy) +if e_dpy.is_null() then + env.out.print("eglGetDisplay failed") +end + +primitive _EGLConfigHandle +let a = Array[U16](8) +a.push(0x3040) +a.push(0b01011) +let config = Pointer[_EGLConfigHandle] +if @eglChooseConfig[U32](e_dpy, a, config, U32(1), Pointer[U32]) == 0 then + env.out.print("eglChooseConfig failed") +end + + +actor Main + new create(env: Env) => + // The no of arguments + env.out.print(env.args.size().string()) + for value in env.args.values() do + env.out.print(value) + end + // Access the arguments the first one will always be the the appication name + try env.out.print(env.args(0)?) end + +actor Main + new create(env: Env) => + var options = Options(env) + + options + .add("output", "o", StringArgument) + + env.out.print(options.has_argument()) + + for option in options do + match option + | ("output", var arg: String) => _outputFileName = arg.string() + | let err: ParseError => + err.report(env.out) + env.out.print( + """ + pony-embed [OPTIONS] + --output name string output filename. + """ + ) + end + end + +use "ponytest" + +actor Main is TestList + new create(env: Env) => PonyTest(env, this) + new make() => None + + fun tag tests(test: PonyTest) => + test(_TestAddition) + +class iso _TestAddition is UnitTest + """ + Adding 2 numbers + """ + fun name(): String => "u32/add" + + fun apply(h: TestHelper): TestResult => + h.expect_eq[U32](2 + 2, 4) + +fun tag log(msg: String, verbose: Bool = false) +be fail() => +be assert_failed(msg: String) => +fun tag assert_true(actual: Bool, msg: String = "") ? +fun tag expect_true(actual: Bool, msg: String = ""): Bool +fun tag expect_eq[A: (Equatable[A] #read & Stringable)] + (expect: A, actual: A, msg: String = ""): Bool + +fun add(other: A): A +fun sub(other: A): A +fun mul(other: A): A +fun div(other: A): A +fun mod(other: A): A +fun eq(other: A): Bool +fun ne(other: A): Bool +fun lt(other: A): Bool +fun le(other: A): Bool +fun ge(other: A): Bool +fun gt(other: A): Bool +fun shl(other: A): A +fun shr(other: A): A +fun op_and(other:A): A +fun op_or(other: A): A +fun op_xor(othr: A): A + +class Test + fun alpha() => + """ + """ + +let dice: Array[U32] = [1; 2; 3 + 4 + 5 + 6 +] + +actor Main + fun foo(n:U32): {ref(U32): U32} => + var s: Array[U32] = Array[U32].init(n, 1) + {ref(i:U32)(s): U32 => + try + s(0) = s(0) + i + s(0) + else + 0 + end + } + + new create(env:Env) => + var f = foo(5) + env.out.print(f(10).string()) + env.out.print(f(20).string()) + + +'\uaaaa' +'\Ubbbbbb' +'\xcc' +"\uaaaaa" +"\Ubbbbbbb" +"\xccc" +34.4 +34.4e43 +43e4 +0x3040 +0xaF +0b01 + +a.endnormal + +/* syntactically false: */ + +0b2332 +0b +0x +0xgf +0f00 +3. +.3 +3.e3 +'' +'\u' +'\ua' +'\uaaa' +'\uaaaaa' +'\uyyyy' +"\u" +"\ua" +"\uaaa" +"\uyyyy" diff --git a/autotests/reference/highlight.pony.ref b/autotests/reference/highlight.pony.ref new file mode 100644 --- /dev/null +++ b/autotests/reference/highlight.pony.ref @@ -0,0 +1,184 @@ +primitive Red fun apply(): U32 => 0xFFFF0000
+
+primitive Colours
+ fun black(): U32 => 0xFF000000
+ fun red(): U32 => 0xFFFF0000
+
+primitive Black
+primitive Blue
+
+type Colour is (Black | Blue )
+
+primitive ColourList
+ fun tag apply(): Array[Colour] =>
+ [Black; Blue]
+
+for colour in ColourList().values() do
+end
+
+type EGLEvent is (U8, F32, F32)
+(var code, var x, var y) = @getEvent[EGLEvent]()
+
+primitive _XDisplayHandle
+primitive _EGLDisplayHandle
+
+let x_dpy = @XOpenDisplay[Pointer[_XDisplayHandle]](U32(0))
+if x_dpy.is_null() then
+ env.out.print("XOpenDisplay failed")
+end
+
+let e_dpy = @eglGetDisplay[Pointer[_EGLDisplayHandle]](x_dpy)
+if e_dpy.is_null() then
+ env.out.print("eglGetDisplay failed")
+end
+
+primitive _EGLConfigHandle
+let a = Array[U16](8)
+a.push(0x3040)
+a.push(0b01011)
+let config = Pointer[_EGLConfigHandle]
+if @eglChooseConfig[U32](e_dpy, a, config, U32(1), Pointer[U32]) == 0 then
+ env.out.print("eglChooseConfig failed")
+end
+
+
+actor Main
+ new create(env: Env) =>
+ // The no of arguments
+ env.out.print(env.args.size().string())
+ for value in env.args.values() do
+ env.out.print(value)
+ end
+ // Access the arguments the first one will always be the the appication name
+ try env.out.print(env.args(0)?) end
+
+actor Main
+ new create(env: Env) =>
+ var options = Options(env)
+
+ options
+ .add("output", "o", StringArgument)
+
+ env.out.print(options.has_argument())
+
+ for option in options do
+ match option
+ | ("output", var arg: String) => _outputFileName = arg.string()
+ | let err: ParseError =>
+ err.report(env.out)
+ env.out.print(
+ """
+ pony-embed [OPTIONS]
+ --output name string output filename.
+ """
+ )
+ end
+ end
+
+use "ponytest"
+
+actor Main is TestList
+ new create(env: Env) => PonyTest(env, this)
+ new make() => None
+
+ fun tag tests(test: PonyTest) =>
+ test(_TestAddition)
+
+class iso _TestAddition is UnitTest
+ """
+ Adding 2 numbers
+ """
+ fun name(): String => "u32/add"
+
+ fun apply(h: TestHelper): TestResult =>
+ h.expect_eq[U32](2 + 2, 4)
+
+fun tag log(msg: String, verbose: Bool = false)
+be fail() =>
+be assert_failed(msg: String) =>
+fun tag assert_true(actual: Bool, msg: String = "") ?
+fun tag expect_true(actual: Bool, msg: String = ""): Bool
+fun tag expect_eq[A: (Equatable[A] #read & Stringable)]
+ (expect: A, actual: A, msg: String = ""): Bool
+
+fun add(other: A): A
+fun sub(other: A): A
+fun mul(other: A): A
+fun div(other: A): A
+fun mod(other: A): A
+fun eq(other: A): Bool
+fun ne(other: A): Bool
+fun lt(other: A): Bool
+fun le(other: A): Bool
+fun ge(other: A): Bool
+fun gt(other: A): Bool
+fun shl(other: A): A
+fun shr(other: A): A
+fun op_and(other:A): A
+fun op_or(other: A): A
+fun op_xor(othr: A): A
+
+class Test
+ fun alpha() =>
+ """
+ """
+
+let dice: Array[U32] = [1; 2; 3
+ 4
+ 5
+ 6
+]
+
+actor Main
+ fun foo(n:U32): {ref(U32): U32} =>
+ var s: Array[U32] = Array[U32].init(n, 1)
+ {ref(i:U32)(s): U32 =>
+ try
+ s(0) = s(0) + i
+ s(0)
+ else
+ 0
+ end
+ }
+
+ new create(env:Env) =>
+ var f = foo(5)
+ env.out.print(f(10).string())
+ env.out.print(f(20).string())
+
+
+'\uaaaa'
+'\Ubbbbbb'
+'\xcc'
+"\uaaaaa"
+"\Ubbbbbbb"
+"\xccc"
+34.4
+34.4e43
+43e4
+0x3040
+0xaF
+0b01
+
+a.endnormal
+
+/* syntactically false: */
+
+0b2332
+0b
+0x
+0xgf
+0f00
+3.
+.3
+3.e3
+''
+'\u'
+'\ua'
+'\uaaa'
+'\uaaaaa'
+'\uyyyy'
+"\u"
+"\ua"
+"\uaaa"
+"\uyyyy"
diff --git a/data/syntax/pony.xml b/data/syntax/pony.xml new file mode 100644 --- /dev/null +++ b/data/syntax/pony.xml @@ -0,0 +1,286 @@ + + + + + + + +]> + + + + + + type + interface + trait + primitive + struct + class + actor + + + var + let + embed + + + fun + be + new + + + do + then + return + break + continue + error + compile_intrinsic + compile_error + recover + until + + + if + ifdef + iftype + match + while + repeat + for + with + try + + + else + elseif + + + end + + + and + or + xor + + + apply + create + add + sub + mul + div + mod + eq + ne + lt + le + ge + gt + shl + shr + op_and + op_or + op_xor + + + not + + + iso + trn + ref + val + box + tag + + + #read + #send + #share + #alias + #any + + + true + false + + + use + object + as + is + isnt + in + where + is + consume + addressof + digestof + + + this + None + String + Bool + ISize + ILong + I16 + I32 + I64 + I128 + USize + ULong + U16 + U32 + U64 + U128 + F32 + F64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +